2017-02-28 9 views
1

私はFirebaseからダウンロードしたいすべての鍵のリストを持っています。このために私はこのコードを使用しています:firebase multiple where whereはequalsToを使用する節

Query newUidsQuery = FirebaseDatabaseHelper.getUsersReference(); 
newUidsQuery.orderByChild(DATABASE_NODE_USER_UID); 
     for (String uid : uidList) { 
      newUidsQuery.equalTo(uid); 
     } 

newUidsQuery.addListenerForSingleValueEvent(); 

は、これは私の現在の構造である:

{ 
    "users" : { 
    "5mvsiNKz2hO4rmcDDNskv855dkB3" : { 
     "contacts" : [ "GG8JeRNOIhb1qloZb4oCAb7Jd593", "gc0ci7Jgu2QpVYFbeiMJfVy1WHP2" ], 
     "contactsHash" : -224276455, 
     "email" : "[email protected]", 
     "name" : "Razvan Cristian Lung", 
     "photoUrl" : "https://lh5.googleusercontent.com/-bItm3-ieAtU/AAAAAAAAAAI/AAAAAAAALZo/mtPyAMohOvg/s96-c/photo.jpg", 
     "uid" : "5mvsiNKz2hO4rmcDDNskv855dkB3" 
    }, 
    "GG8JeRNOIhb1qloZb4oCAb7Jd593" : { 
     "contactsHash" : 1, 
     "email" : "[email protected]", 
     "name" : "Andra Florina Lung", 
     "photoUrl" : "https://lh4.googleusercontent.com/-po2yelyi3mY/AAAAAAAAAAI/AAAAAAAAQ5s/ROefxP6Q1oA/s96-c/photo.jpg", 
     "uid" : "GG8JeRNOIhb1qloZb4oCAb7Jd593" 
    }, 
    "gc0ci7Jgu2QpVYFbeiMJfVy1WHP2" : { 
     "contactsHash" : 1, 
     "email" : "[email protected]", 
     "name" : "Lung Razvan", 
     "photoUrl" : "https://scontent.xx.fbcdn.net/v/t1.0-1/p100x100/15390976_1192204140865562_3397773349261436244_n.jpg?oh=d61795a8df67d3e9c5ddf60557e9e60c&oe=59270863", 
     "uid" : "gc0ci7Jgu2QpVYFbeiMJfVy1WHP2" 
    } 
    } 
} 

問題は、私は特定のキーを持つエントリのみを取得しようとすると、私はまた、他を得ることですそのキーを「連絡先」フィールドに値として持つエントリ。

+0

'orderByChild'を' orderByKey() 'に置き換えてみてください。それはあなたが望む結果ですか? – koceeng

+1

同じ結果が、実際には私の最初の試みだった –

答えて

3

orderBy...などのメソッドを呼び出すと、新しいクエリが返されます。したがって、あなたはそれぞれuidの新しいクエリを作成しています。それを維持するにはnewUidsQuery = newUidsQuery.equalTo(uid)が必要です。

しかし、クエリは1つのプロパティと値に対してのみ順序付け/フィルタリングできるため、まだ問題は解決しません。 Query based on multiple where clauses in firebaseを参照してください。

ここで重要なことは、項目を一度に1つずつ取り出すことができるという点です。あなたが期待するかもしれないものとは異なり、それは一度にそれらを検索するよりも大幅に遅くはありません。 Speed up fetching posts for my social network app by using query instead of observing a single event repeatedlyを参照するか、#AskFirebaseのこのエピソードをご覧ください:https://youtu.be/66lDSYtyils?t=1m49s

+0

お返事ありがとうございます。私はウィークエンドコースでFirebaseを取ってきました。私はFireCastを見ました。再度、感謝します。問題は、RecyclerViewアダプタを更新したいので、1つをすべて取得する必要があることです。新しい商品が届くたびにリクエストを送信して更新することは望ましくありません。しかし、これが不可能な場合、私は一つずつ電話をかけます。再度ありがとう、パフ! "エヴァンゲロス" :)) –

+1

笑...エヴァンゲロスのことは何年もの間私を傷つけるだろう。 :-) FirebaseUIには、これらのジョインを処理するアダプタの例があります:https://github.com/firebase/FirebaseUI-Android/tree/master/database#using-firebaseu-with-indexed-data –