【问题标题】:I get my Firebase user Uid but its dataSnapshot keys value return null我得到了我的 Firebase 用户 Uid,但它的 dataSnapshot 键值返回 null
【发布时间】:2019-11-17 18:04:33
【问题描述】:

我的 Firebase 实时数据库结构

我在一个电子书项目中制作了两个应用程序,一个供管理员使用,另一个供用户使用。

当管理员在 Firebase 上输入图书数据时,用户将能够在其应用中看到管理员提供的信息。

我在用户应用程序上执行了此操作,但管理员 ID 仍然具有以下键的值为 null。

当我调试应用程序时,我的DataSnapshot 向我显示了键的 null 值。

我的应用调试模式:

when I get admin Uid but it show me null

when I set admin id in database Reference and its get Uid

and I'm get admin Id throw database reference but it dataSnapshot key's value is null

这是我的代码:

private String adminId;
private Button button1,button2,button3;
private RecyclerView bookListRv;
private ArrayList<Book> bookList;
private BookAdapter bookAdapter;
private FirebaseAuth firebaseAuth;
private DatabaseReference databaseReference;

public BookListFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_book_list, container, false);

    init(view);
    adminId = firebaseAuth.getUid();


    configRv();

    getBooks();


    return view;
}



private void init(View view) {

    bookListRv = view.findViewById(R.id.bookRVId);
    firebaseAuth = firebaseAuth.getInstance();
    databaseReference = FirebaseDatabase.getInstance().getReference();
    bookList = new ArrayList<>();
    bookAdapter = new BookAdapter(bookList, getContext());
}

private void configRv() {
    bookListRv.setLayoutManager(new LinearLayoutManager(getContext()));
    bookListRv.setAdapter(bookAdapter);
}

private void getBooks(){
    DatabaseReference showBookRef = databaseReference.child("Books").child(adminId);

    showBookRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                for (DataSnapshot data:dataSnapshot.getChildren()){
                    Book book = data.child("BookInfo").getValue(Book.class);
                    bookList.add(book);
                    bookAdapter.notifyDataSetChanged();
                }
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });


}

任何帮助我的感激之情

【问题讨论】:

  • 第一步是停止忽略潜在的错误并实施onCancelled。最低实现是public void onCancelled(@NonNull DatabaseError databaseError) { throw databaseError.toException(); }

标签: java android firebase firebase-realtime-database


【解决方案1】:

观察

  1. 在管理应用程序中,您在管理 UID 下上传 BookInfo - oJ26Q...G3
  2. 在用户应用程序中,您尝试使用用户 UID - 0FX6M... 获取此 BookInfo

结论

  1. 这意味着您无法使用用户 UID 访问 BookInfo
  2. 如果您知道管理员 UID,则可以从用户应用程序访问它。

可能的解决方案: 将BookInfo 上传到一个公共位置[不考虑用户],以便每个用户在管理员上传后立即访问BookInfo

然后像下面这样查询它:

databaseReference.child("Books").addValueEventListener

当前情况下的解决方法: 您必须使用硬编码的adminId 才能获得BookInfo。检查以下:

private void getBooks(){
    DatabaseReference showBookRef = databaseReference.child("Books").child("oJ26QDoFZBWAgWjxbFOX5jv1tcG3");

    showBookRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                for (DataSnapshot data:dataSnapshot.getChildren()){
                    Book book = data.child("BookInfo").getValue(Book.class);
                    bookList.add(book);
                    bookAdapter.notifyDataSetChanged();
                }
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

【讨论】:

  • 医学博士。 Asaduzzaman 先生,首先我得到 admin uId throw adminId = firebaseAuth.getUid(); 但它的调试模式显示我为 null,当我编写此代码时 DatabaseReference showBookRef = databaseReference.child("Books").child(adminId); 它得到 admin Uid 并且我正在使用 showBookRef.addValueEventListener 然后它显示我 DataSnapshot { key = 0FX6MlEmaWNuDVcRv3HgZC8Oq8a2, value = null }
  • 你不能那样做。我检查了您的图像,发现 UID 不同。请仔细检查。
  • 同时检查您的数据库 BookInfo 不在此 UID 0FX6MlEmaWNuDVcRv3HgZC8Oq8a2 下。那是不同的东西,比如oJ26Q...G3
  • @RifatKhan,你检查了吗?
  • 是的,先生,但它不起作用。你能帮我如何从这个oJ26QDoFZBWAgWjxbFOX5jv1tcG3 uId 中检索数据吗?因为这是我的管理员 uId,我从另一个用户 uId 检索数据。
猜你喜欢
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多