java - 从知道 uid 的 firebase 检索用户名
问题描述
我对 Android 和 Java 还是很陌生,我正在尝试自学锁定。现在我正在尝试根据已知的uid
并且无法完全弄清楚语法来检索用户名。
我的 firebase 数据库看起来像这样
├── chat
│ ├── -M5D96yP5Ac688-ZPU0C << chatId 1
│ │ ├── info
│ │ │ ├── groupName: Breakfast Club
│ │ │ ├── id: -M5D96yP5Ac688-ZPU0C
│ │ │ └── Users:
│ │ │ ├── 8J7PX3ezjMTuOiAPO1BbOGJGP1g1: true
│ │ │ └── QvmGG2vPfTrdjZBfWP2ZotajYE3: true
│ │ └──Messages
│ │ .....
├── user
│ ├── 8J7PX3ezjMTuOiAPO1BbOGJGP1g1 << userId
│ │ ├── chat:
│ │ │ ├── -M5D96yP5Ac688-ZPU0C: true << chatId 1
│ │ │ ├── -M5DQuUsTJwO6tdVUstC: true
│ │ │ └── -M5DQuUsTJwO6tdVUstC: true
│ │ ├── email: JohnBender@bkfastclub.com
│ │ ├── name: John Bender
│ │ └──notificationKey: "28cb76b1-e2cd-4fa6-bf37-38336dafc45a"
│ ├── kLdxJGA7Yyfch1TthnnAPrnyny93
我有我所在的 groupId,并且存储了成员的 userId
private void getGroupMembers() {
String key = mChatObject.getChatId();
ArrayList<UserObject> mMembers = mChatObject.getUserObjectArrayList();
DatabaseReference chatInfoDb = FirebaseDatabase.getInstance().getReference().child("chat").child(key).child("info").child("users");
DatabaseReference mUserDB = FirebaseDatabase.getInstance().getReference().child("user");
// Query query = mUserDB.orderByChild("uid").equalTo(chatInfoDb.getUid());
}
我只是不太清楚如何搜索用户路径并获取用户的名称并存储它们。最终我想将它们显示在RecyclerView
.
任何帮助将非常感激。
解决方案
如果您正在尝试获取用户的姓名,请chat/chatID/info/users
查看我的答案
好的,如果您key
实际上是正确的,首先循环遍历所有子节点,chat/chatID/info/users
然后通过调用User
节点来获取名称。
像这样:
//chat ID
String key = mChatObject.getChatId();
//database reference (be careful for lower case or upper case names)
DatabaseReference chatInfoDb = FirebaseDatabase.getInstance().getReference().child("chat").child(key).child("info").child("Users");
DatabaseReference mUserDB = FirebaseDatabase.getInstance().getReference().child("user");
//a first call to the `chat` node:
ValueEventListener chatListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//loop through children
for(DataSnapshot ds: dataSnapshot.getChildren()){
//this will run n times, where n is the number of children under chat/chatID/info/Users
String userId = ds.getKey();
//now we grab the name for every userID under chat/chatID/info/Users
mUserDB.child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//grab the name and add it to some list
String name = dataSnapshot.child("name").getValue(String.class);
list.add(name)
}
@Override
public void onCancelled(DatabaseError databaseError) {
// log error
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
}
});
}//loop end
}
@Override
public void onCancelled(DatabaseError databaseError) {
//log error
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
}
};
chatInfoDb.addValueEventListener(chatListener);
推荐阅读
- android - 加载无效 url 时 Glide 崩溃应用程序
- entity - 如何在 Node.js 中使用会话实体编程?
- java - 如何使用 Eclipse 国际化 OSGi 应用程序?
- css - 如何根据 sass 中的选择器更改变量
- c# - 无法读取 FutureAccessList 中的文件
- flutter - 如何使 BottomNavigationBarItem 不可点击并禁用点击飞溅效果?
- python - 删除字典中具有整数值的值的引号
- arm - STMCUBEIDE - H7 系列强制使用 SMLAL (Signed Multiply with Accumulate (32 × 32 + 64), 64-bit result) 指令
- kubernetes - 基于 nginx-ingress 上的 HTTP 标头值的速率限制请求
- python - 如何在电报机器人中创建标记菜单