![](/img/trans.png)
[英]android firebase database how to retrieve all data from child node
[英]How to retrieve a specific child data from all the users in firebase
我正在創建一個博客應用程序,用戶可以在使用他們的帳戶登錄后發布。 我的問題是我希望能夠顯示所有用戶的所有博客。 在所有用戶的 Uid 下都有一個名為 Blog 的子項,我想將其顯示在我的儀表板上,因此當用戶使用他們的帳戶登錄時,他們能夠看到其他用戶的博客。 我希望問題很清楚。任何人都可以幫助我。 謝謝你。
這是我的代碼,但這給了我錯誤權限被拒絕,
private void loadPost() {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("users").child("Blog");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
postList.clear();
for (DataSnapshot ds: dataSnapshot.getChildren()){
ModelPost modelPost = ds.getValue(ModelPost.class);
postList.add(modelPost);
adapterPost = new AdapterPost(getActivity(), postList);
recyclerView.setAdapter(adapterPost);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getActivity(), ""+databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
這是我的數據庫。
這是我的數據庫安全規則
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
您的代碼嘗試從此getReference("users").child("Blog")
讀取,這有兩個問題:
/users/Blog
中沒有數據。/users/Blog
。您的規則允許用戶閱讀他們自己的節點,包括博客文章和個人資料信息。 要閱讀用戶自己的博客文章,您會聽到:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("users").child(uid).child("Blog")
請注意,這不允許用戶閱讀所有用戶的所有博客文章。 事實上,在您當前的 model 中,如果不授予他們讀取所有用戶配置文件的權限,這是不可能的,我認為這不是您想要的。
如果您想允許用戶閱讀所有博客文章,但只允許他們訪問自己的個人資料,則需要創建兩個單獨的頂級節點:
profiles: {
uid1: {
}
uid2: {
}
}
blogs: {
uid1: {
blogid1: { ... }
blogid2: { ... }
}
uid2: {
blogid3: { ... }
blogid4: { ... }
}
}
或者,您可以 model 最后一個結構中的博客為:
blogs: {
blogid1: { uid: "uid1". ... }
blogid2: { uid: "uid1". ... }
blogid3: { uid: "uid2". ... }
blogid4: { uid: "uid2". ... }
}
無論哪種情況,您現在都可以通過以下方式允許訪問:
"rules": {
"profiles": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
},
"blogs": {
".read": true"
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.