2017-09-05 11 views
0

DataSnapshotから特定の値を取得したいと思います。
ここでスクリーンショットを添付していますので、Realtime Databaseから特別な価値を得ることを丁寧にチェックしてください。
enter image description here`Firebase`の` DataSnapshot`を使って特定の値を得る方法

は、実際に私は私がgroup_listからuserの値を取得したいchatアプリケーションを実装しています。 ここに私のコードです。

private void loadTotalGroupList() { 

     referenceMainUrl = FirebaseDatabase.getInstance().getReferenceFromUrl("https://pure-coda-174710.firebaseio.com"); 
     referenceGroupList = referenceMainUrl.child("group_list"); 

     //Check if child is available or not. 
     referenceGroupList.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       if (dataSnapshot.exists()) { 


        Log.e("dataSnapshot"," ==>"+dataSnapshot); 
        Map<String, Object> newPost = (Map<String, Object>) dataSnapshot.getValue(); 

        Log.e("newPost"," ==>"+newPost); 

        Log.e("user: ","==>" + newPost.get("user")); // Here I am getting null value 


       } else { 
        Log.e("Child not found", " >>>"); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
      } 
     }); 
    } 

およびlogこのように示される。 DataSnapshot {=キーgroup_list、値= {最初のグループ= { - KtBH9gnTszNxcXjNu9A = {メッセージ= assaasas、ユーザー= sakib}}}}

答えて

0

の値を与えますそのすべてのサブ子を返しdataSnapshot.getKey()ここaddChildEventListener

referenceGroupList.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) { 



      Log.e("dataSnapshot KEY", " ==>" + dataSnapshot.getKey()); 

     } 
     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String prevChildKey) { 
     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 
     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String prevChildKey) { 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    }); 

を使用して問題。

0

あなたはあなたのコード内の場所/group_listを聴いています。

dataSnapshot.child("First Group").child("-KtBH9gnTszNxcXjNu9A").child("user").getValue() 
:あなたはその場所からユーザーの値を取得したい場合は、各中間パスを使用して、それに掘る必要があるでしょう

/First Group 
    /-KtBH9gnTszNxcXjNu9A 
     message = "..." 
     user = "..." 

:それは、次の含まれていますその場所からAAのスナップショットを意味し、

またはより簡単に:

dataSnapshot.child("First Group"/-KtBH9gnTszNxcXjNu9A/user").getValue() 

スナップショットの途中のパスをスキップすることはできません。また、あなたが必要な値に近い場所に聞きたいことがあります。

referenceMainUrl.child("group_list/First Group/-KtBH9gnTszNxcXjNu9A"); 
+0

@ Doug Stevenson返信ありがとうございますが、新しいグループが作成されるたびにクエリがあります。この値は、-KtBH9gnTszNxcXjNu9A'が異なるため、管理方法が異なります。私はどのようにすべてのグループのリストから 'user'を取得するのか分かりません。 –

0

このコードは、ループ内で実行され、私は私を解決してきたあなたはすべての「ユーザーの

DatabaseReference dRef = FirebaseDatabase.getInstance().getReference().child("group_list").child("First_Group"); 
    dRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for(DataSnapshot snapshot : dataSnapshot.getChildren()){ 
       String userName = snapshot.child("user").getValue(String.class); 
      } 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    }); 
関連する問題