用火力地堡键获取元素

Rad*_*oka 6 android firebase firebase-realtime-database

我一直在试图使用它的键从我的火力地堡数据库中检索的元素。我有一类用户和用户存在于数据库中。

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);
}
Run Code Online (Sandbox Code Playgroud)

但它返回一个空列表每次。

小智 0

在这里,您尝试仅检查已更改数据的非常具体的 ID。相反,请尝试使用 Firebase 查询filterByKey而不是使用您自己的函数来实现此目的。这是我用来尝试替换您的函数的示例代码:

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());
        // ...
    }
});
Run Code Online (Sandbox Code Playgroud)

如 Firebase 文档中所述: https: //firebase.google.com/docs/database/android/lists-of-data#filtering_data