java - 根据已知的 uid 从 firebase 检索用户名

标签 java android firebase firebase-realtime-database

我对 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

Variables

    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);

关于java - 根据已知的 uid 从 firebase 检索用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61362727/

相关文章:

javascript - 如何在没有来自 Firebase 的现有数据的情况下只获取新数据?

java - 如何将分隔符设置为 "\\p{Punct}"不包括引号?

java - 如何获取Java异常堆栈跟踪所涉及的实例的引用?

java - 为什么 Swing 组件应该只在事件调度线程上访问?

android - 在 Kotlin 多平台项目中与 Compose 共享 Activity

java - Android Firebase数据库自动刷新更新2

firebase - 如何在不暴露 Firebase 其余部分的情况下共享对 Firebase Analytics 数据的访问?

java - 在 REST 中处理相同的并发请求

android - 将触摸发送到 ActivityInstrumentationTestCase2 测试时如何修复 INJECT_EVENTS 权限异常

android - 用完导航时如何使用主/详细信息 fragment 返回到父列表 Activity ?