新しいFirebaseデータベースフレームワークを使用しているAndroidアプリケーションで作業しています。 トップの親(1234-4321)が「チャットルーム」であり、データオブジェクトが「チャットメッセージ」であり、番号付きアイテム(0,1,2)が「チャットルーム」である場合、 「個別のメッセージ」です。Google Firebaseデータベースでフィルタと子要素を利用する方法
私はどんなトラブルもなく、データベース全体を取得し、リスナーを経由して、それを読み取ることができています:
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();
myRef.addChildEventListener(this);
myRef.addValueEventListener(this);
そして、私はこの方法で、単一の子を取得することができています:
FirebaseDatabase database = FirebaseDatabase.getInstance();
String id = "1234-4321";
DatabaseReference myRef = database.getReference().child(id);
myRef.addChildEventListener(this);
myRef.addValueEventListener(this);
しかし、私私の人生は、同じタイプの複数のオブジェクトを取得する方法を理解できません。つまり、ユーザーは複数のチャットルーム(IE、「1234-4321」と「1234-4432」の両方)を取得できますが、これを行うには、次のいずれかの方法があります。
1)onChildAddedまたはonDataChangeリスナーをループし、String IDに一致するアイテムを分離して更新します。私は特定の子を追加するには
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if(dataSnapshot != null){
try {
ChatObjectV2 objectV2 = (ChatObjectV2) dataSnapshot.getValue();
//Check here for ids and loop through everything
} catch (Exception e){
e.printStackTrace();
}
}
}
または
2非常に大きくなる可能性があり、データベース全体を、)パースしていますので、これは、しかし、非常に非効率的ですが、私はより多くの子供を追加しようとする場合には、ネストされたオブジェクトに「より深く」入っていくときに、「より広い」方向に移動したいと思っています。
//This won't work because it is going 'deeper' instead of 'wider'
String id = "1234-4321";
String id2 = "1234-4432";
Query myQuery = myRef.child(id).child(id2);
その後は同じようリスナーでループスルー、しかし、私は恐ろしく非効率的であるすべてのチャットルームのために異なるDatabaseReferenceを作成する必要があります。
解決策はおそらくfiltersのようですが、私の人生の中で、既存のFirebaseDatabaseオブジェクトとDatabaseReferenceオブジェクトでそれらを利用する方法を理解できません。誰も私がここにリストしたデータスキーマ/モデルに関してフィルタを動作させる方法を知っていますか?
ありがとうございました!
それらを読んで、間違いなく役に立ちましたが、サンプルのどれも私がしようとしているもののために働かないでしょう。私は本当の目標はここに私のクエリ(IEのどこでID = 123またはどこでID = 321)、私は実際にはどこのドキュメントに表示されない複数の句を追加することだと思います。あなたがこれまでに聞いたことがあるか、それがfirebase(Java/Android)でどのように実行できるか知っていますか? – Silmarilos
だから、あなたはそれらの2つのIDを使うつもりです。 ID1とID2との間の共通の接続は何ですか?それらはどのように関連しますか? –
関係はちょうど彼らのIDがチャットルームのどこかで送信IDか受信IDのどちらかであることである:例えば、顧客Aは2つの「チャットルーム」を開いている、それらによって開始されたチャットルーム、したがって、顧客Aは2つのフィールド(「sentBy」または「receivedBy」)のいずれかにIDを持つことになります。 – Silmarilos