2017-03-07 165 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);