2017-09-21 1 views
0

私はJavaでfirebaseを使用しており、チャットを開始したユーザーのリストを持つ "Chatmessages"という名前のデータベース内に子があります。このリストには、それらのユーザーのUIDが含まれています。また、私のデータベースには、すべてのユーザーの情報を含む「ユーザー」の子もあります。どのように "Chatmessages"をUIDのリストと共に使用するのですが、 "Users"からの対応するUIDの情報を取得します。Firebase:UIDの子にアクセス

Database

答えて

2

データベース構造によれば、これを達成するにはデータベースを2回クエリする必要があります。両方のノードが、ChatmessagesUsersがあなたのFirebaseルートの直接のチャイルズがあると仮定すると、次のコードを使用してください:このコードを使用して

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference chatIdRef = rootRef.child("Chatmessages").child(chatId); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String uid = ds.getKey(); 

      DatabaseReference usersRef = rootRef.child("Users").child(uid); 
      ValueEventListener eventListener = new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        String image = dataSnapshot.child("image").getValue(String.class); 
        String name = dataSnapshot.child("name").getValue(String.class); 
        Boolean onlineStatus = dataSnapshot.child("onlineStatus").getValue(Boolean.class); 
        String status = dataSnapshot.child("nstatusame").getValue(String.class); 
        Log.d("TAG", image + "/" + name + "/" + onlineStatus + "/" + status); 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) {} 
      }; 
      usersRef.addListenerForSingleValueEvent(eventListener); 

     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
chatIdRef.addListenerForSingleValueEvent(eventListener); 

を、あなただけの特定のチャットからユーザーのデータを取得します。私が最初にDatabaseReferenceという変数を使用したことを確認してください。実際には特定のチャットのIDであるという名前です。たとえば、あなたのスクリーンショットでは5kAiGg7zuです...

+0

ありがとう!私は同じことをやるが、ユーザーのリストをロードする方法を知っていますか? – nothing

+0

同じようにする必要があります。リスナーを追加し、ユーザーのみを照会します。 –

+0

doesntの仕事 ) – nothing

0

私が正しくあなたの質問を理解していれば、あなたは、特定のユーザーのチャットメッセージを取得したいです。これを行うには、特定のユーザーのuidにアクセスする必要があります。それを保存する1つの方法は、ユーザーがサインインまたはサインアップしてキーを取得し、SharedPreferencesに保存するときです。

キーを取得したら、firebaseクエリを実行してこのユーザーのチャットメッセージを取得できます。あなたはあなたが使用しようとしているfirebaseリスナーの3つのオプションがあります。すべてのデータのデータスナップショットを提供するValueEventListener、その時点で1つの子を返すChildEventListener、すべてのデータのデータスナップショットを一度だけ与えるSingleValueEvenetListenerなどがあります。

Query queryChatMessages = mDatabase.child("Chatmessages").child(uid); 
queryChatMessages.addChildEventListener("your listener"); 
関連する問題