2017-09-27 133 views
0

我想使用微調器來顯示特定用戶名下的密鑰,但不幸的是它沒有返回給微調器。我用一個數組來存儲用戶名下的鍵值。 這裏是我的數據庫結構如何獲得鑰匙下的鑰匙值?

Database structure

讓我們說我rexyou0831,我只是想找回用戶名2這我的用戶名,但我的代碼下回到我沒有到列表中。 un是我當前的用戶名變量。請如果你有任何想法,請與我分享謝謝。

赫斯我的代碼

db = FirebaseDatabase.getInstance(); 
cref = db.getReference("chat"); 

public ArrayList<String> retrieve() 
{ 
    final ArrayList<String> Student=new ArrayList<>(); 
    cref.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for (DataSnapshot c:dataSnapshot.getChildren()) 
      { 

       if(c.getKey().equals(un)){ 

        for(DataSnapshot d: dataSnapshot.getChildren()){ 

         Student.add(d.getKey()); 

        } 

       }else{ 

        Student.clear(); 
       } 

      } 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

    return Student; 
} 
+0

什麼是內部循環'un' – akhilesh0707

+0

firebase'Listener'是異步的,你需要在循環完成後在適配器中設置數據 – akhilesh0707

+0

如果在「聊天」中獲得任意鍵相同的用戶名,那麼un是用戶名。 –

回答

2

爲了讓您的用戶名下的用戶名,請使用如下代碼:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference userRef = rootRef.child("chat").child("rexyou0831"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     List<String> list = new ArrayList<>(); 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String userName = ds.getKey(); 
      list.add(userName); 
     } 
     Log.d("TAG", list); 
    } 

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

你出去放將是:gigi1212,mario123]

請注意,onDataChenge()被稱爲異步,這意味着甚至在將這些鍵添加到列表之前調用它。作爲一個暗示,您需要聲明並使用onDataChenge()中的該列表,否則爲null

+0

再次。謝謝alex。 –

+0

@AlexMamo投票上來 – akhilesh0707

+0

@ akhilesh0707謝謝akhilesh0707! –