【发布时间】:2021-11-02 08:23:09
【问题描述】:
我正在学习为 Android 应用实施 Firebase 实时数据库。在其中一个片段中,我试图检索表中的所有用途。当有人注册时,“用户”节点会自动生成。对于注册,我使用的是 FirebaseAuth。
每个用户都是在注册后创建的。我的用户表中有 4 个用户:
1. TestUser1
2. TestUser2
3. TestUser3
4. TestUser4
每个用户都有姓名、电子邮件、手机、在线状态和照片。我正在使用以下代码:
Query query = dbReference.orderByChild(NodeNames.NAME);
query.addValueEventListener(new ValueEventListener() {
@SuppressLint("NotifyDataSetChanged")
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
findFriendsModelList.clear();
for (DataSnapshot ds : snapshot.getChildren()) {
String userId = ds.getKey();
if (userId.equals(currentUser.getUid()))
return;
if (ds.child(NodeNames.NAME).getValue()!=null) {
String fullName = ds.child(NodeNames.NAME).getValue().toString();
String photoName = ds.child(NodeNames.PHOTO).getValue().toString();
findFriendsModelList.add(new FindFriendsModel(fullName,photoName,userId,false));
findFriendsAdapter.notifyDataSetChanged();
tvFindFriends.setVisibility(View.GONE);
progressBar.setVisibility(View.GONE);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
progressBar.setVisibility(View.GONE);
Toast.makeText(getContext(), getContext().getString(R.string.failed_to_fetch_friends,error.getMessage()), Toast.LENGTH_SHORT).show();
}
});
当 Android 从表中获取数据时,数据会按照用户名的创建顺序为每个用户递增。
例如:
我将 TestUser1 注册为第一个用户,然后是 testuser2、TestUser3 和 TestUser4。
当我以 TestUser1 身份登录时,我可以看到 TestUser2、TestUser3 和 TestUser4
Login as TestUser1 --> can see --> All other users
Login as TestUser2 --> can see only --TestUser3 & TestUser4.
Login as TestUser3 --> can see only --> TestUser4
Login as TestUser4 --> can see only --> ProgressBar.
换句话说,当我以用户身份登录时,我无法看到在我之前注册的任何其他用户。如何查看节点中的所有用户?
Realtime dDtabase 是这样的:
{
"Users" : {
"H4remW9oKDe5iWN74KT5jTHZk1S2" : {
"email" : "tuser4@gmail.com",
"mobile" : "1234567890",
"name" : "TestUser4",
"online" : "true",
"photo" : "/v0/b/aivu-a1380.appspot.com/o/images/H4remW9oKDe5iWN74KT5jTHZk1S2.jpg"
},
"N0Rx9r71PubzzWkO8YXFABuNZNL2" : {
"email" : "tuser3@gmail.com",
"mobile" : "1234567891",
"name" : "TestUser3",
"online" : "true",
"photo" : "/v0/b/aivu-a1380.appspot.com/o/images/N0Rx9r71PubzzWkO8YXFABuNZNL2.jpg"
},
"V1AJt2vWOmNKrBzu6EOFdm4aXdI3" : {
"email" : "tuser1@gmail.com",
"mobile" : "1234567892",
"name" : "Sujatha",
"online" : "true",
"photo" : "/v0/b/aivu-a1380.appspot.com/o/images/V1AJt2vWOmNKrBzu6EOFdm4aXdI3.jpg"
},
"iymUckwHCucx7t4b8mdCkSrqzS22" : {
"email" : "tuser2@gmail.com",
"mobile" : "1234567894",
"name" : "TestUser 2",
"online" : "true",
"photo" : "/v0/b/aivu-a1380.appspot.com/o/images/iymUckwHCucx7t4b8mdCkSrqzS22.jpg"
}
}
}
【问题讨论】:
-
请编辑您的问题并将您的数据库结构添加为 JSON 文件,而不是描述您的数据库的外观。您可以通过单击 Firebase Console 的溢出菜单 (⠇) 中的导出 JSON 来简单地获取它。还请说明您希望获得或限制什么?
-
@AlexMamo。谢谢你。我已将儿子添加到问题中。我想获得所有用户。
标签: java android firebase firebase-realtime-database google-cloud-platform