2017-09-05 97 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

我已經解決了我通過使用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) { 
     } 
    }); 

這裏dataSnapshot.getKey()回報它的所有子子問題。

0

您正在收聽的是在你的代碼的位置/group_list。這意味着從該位置AA快照將包含以下內容:

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

如果你想從該位置的用戶價值,你就必須使用每個中間路徑挖進去:

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

或者更簡單地說:

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) { 
     } 
    }); 
相關問題