我的Firebase实时数据库结构
我在eBook项目中制作了两个应用程序,一个用于管理员,另一个用于用户。
当管理员在Firebase上输入书籍数据时,用户将可以在其应用程序中查看管理员提供的信息。
我在用户应用程序上执行了此操作,但是admin ID仍然具有以下键的值为空。
当我调试应用程序时,我的DataSnapshot
向我显示了密钥的空值。
我的应用调试模式:
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) {
}
});
}
任何帮助我得到赞赏的人
答案 0 :(得分:1)
观察:
BookInfo
-oJ26Q...G3
BookInfo
0FX6M...
结论:
BookInfo
。 可能的解决方案:
将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) {
}
});
}