【问题标题】:How to get multiple children with their IDs in one query如何在一个查询中获取多个具有 ID 的孩子
【发布时间】:2016-11-03 10:55:12
【问题描述】:

我正在尝试将聊天功能添加到使用 Firebase 实时数据库作为存储的 Android 应用程序中。

我的架构是这样的,

conversation: {
  conversation_id_generated_by_firebase: {
    last_message: {
      message: "hehe"
      type: "text"
      attachments: {0: "url", 1: "url"}
      likes: {0: "uid1", 1: "uid2"}
      created_at: 1245789898
    },
    messages: {
      m1: {
        message: "hehe"
        type: "text"
        attachments: {0: "url", 1: "url"}
        likes: {0: "uid1", 1: "uid2"}
        created_at: 1245789898
      }, m2: {}, m3: {}, m4: {}
    },
    read_till: {
      uid1: 14567894229
      uid2: 14567894228
    },
    created_at: 1456789329
    updated_at: 1456789429
  },
}

现在,我如何在一个查询/调用中获取多个带有 id 的对话?

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    没有与 SQL 的 SELECT * WHERE id IN (1,2,3) 等效的 Firebase。在 Firebase 中,您将分别检索每个项目。

    这并不像大多数开发人员想象的那么慢,因为 Firebase 可以通过单个连接有效地输送此类请求。请在此处查看我的答案以获得更长的解释(以及一些 ASCII 艺术):Speed up fetching posts for my social network app by using query instead of observing a single event repeatedly

    【讨论】:

      【解决方案2】:

      通过检索 ID,您是否意味着要检索“conversation_id_generated_by_firebase”,如果是,我已经实现了一些类似的东西,根据您的数据库详细信息修改了代码。如果您可以提供一些您尝试过的代码,我可以进一步帮助您。

          ArrayList<String> keyList = new ArrayList<>();
      
          // i am assuming you have Chat Object for each conversation
          ArrayList<Chat> chatList = new ArrayList<>();
      
          myRef = database.getReference().child("conversation");
          ValueEventListener chatListener = new ValueEventListener() {
              @Override
              public void onDataChange(DataSnapshot dataSnapshot) {
              //will be called every time a new conversation is added
      
                if(dataSnapshot != null){
                    for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {  
                      String key = postSnapshot.getKey();
      
                      //store key(your id) in array list
                      keyList.add(key);
      
      
                      //now i am assuming you have an object of chat message
                      Chat chat = postSnapshot.getValue(Chat.class);
      
                      //add all conversation to chatList ArrayList
                      chatList.add(chat);
                     }
                 }
              }
      
      
      
              @Override
              public void onCancelled(DatabaseError databaseError) {
               //handle error incase something fails
              }
          };
          myRef.addValueEventListener(chatListener);
      

      【讨论】:

        猜你喜欢
        • 2019-07-06
        • 1970-01-01
        • 1970-01-01
        • 2020-06-22
        • 2017-09-21
        • 2017-10-27
        • 1970-01-01
        • 2020-06-21
        • 1970-01-01
        相关资源
        最近更新 更多