2017-03-07 171 views
3

我一直在嘗試使用密鑰從我的Firebase數據庫中檢索元素。我有一個類用戶和用戶在數據庫中。通過Firebase獲取密鑰元素

1

我想用它的鍵用此方法來檢索對象的用戶:

public User getConnectedUserByUId(final String uid){ 
    DatabaseReference database = FirebaseDatabase.getInstance().getReference(); 
    DatabaseReference ref = database.child("users"); 
    final List<User> connectedUser= new ArrayList<User>(); 
    ref.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot item: dataSnapshot.getChildren()) { 
       if (item.getKey()==uid) 
       { 
        User user= dataSnapshot.getValue(User.class); 
        connectedUser.add(user); 
       } 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 

    }); 
    return connectedUser.get(0); 
} 

但每次都返回一個空列表。

+0

使用'item.getKey()等於(UID)'代替。 – Journey

回答

0

在這裏,您只嘗試檢查已更改數據上的特定ID。請嘗試使用帶有filterByKey的Firebase查詢,而不是使用自己的功能來實現該功能。下面是我會用嘗試更換你的函數代碼示例:

DatabaseReference database = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference ref = database.child("users"); 
Query connectedUser = ref.equalTo(uid); 
connectedUser.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) { 
      // TODO: handle the post here 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     // Getting Post failed, log a message 
     Log.w(TAG, "loadPost:onCancelled", databaseError.toException()); 
     // ... 
    } 
}); 

由於火力地堡文檔在這裏規定:https://firebase.google.com/docs/database/android/lists-of-data#filtering_data

1

問題就在這裏:

if (item.getKey()==uid) 

,因爲你是在比較2 String in java 您必須使用方法 string.equals(Object other)不是==運算符。

此外,由於您知道Firebase中數據的關鍵字,因此您可以使用它獲取參考而不必騎自行車所有的孩子。
喜歡的東西:

DatabaseReference database = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference ref = database.child("users").child(uid);