2016-11-03 8 views
1

Firebird Realtime DBをストレージとしてAndroidアプリにチャット機能を追加しようとしています。IDを持つ複数の子供を1つのクエリで取得する方法

私のスキーマは、このようなもので、

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 
    }, 
} 

は今、どのように私は1つのクエリ/コールでIDを持つ複数の会話を取得することができますか?

答えて

0

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

SQLのSELECT * WHERE id IN (1,2,3)に相当するFirebaseはありません。 Firebaseでは、各項目を個別に取得します。

これは、ほとんどの開発者が考えるように、Firebaseはそのような要求を1回の接続で効率的にパイプライン処理できるため、ほとんど遅くはありません。私の答えは、長い説明(およびいくつかのASCIIアート)を参照してください:Speed up fetching posts for my social network app by using query instead of observing a single event repeatedly

関連する問題