5

在我的应用程序中,我使用了 Firebase 数据库并将 userID 存储在一个孩子中,并将孩子的值设置为用户名以获取当前用户的用户名。现在我使用 addValueEventListener 从数据库中获取用户名。这是我的 Firebase 结构。数据库结构

代码如下。

checkUsername.child("check").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                currentUser = dataSnapshot.child(getUserID()).getValue(String.class);
                Log.d(TAG, "onDataChange: currentUser = " + currentUser);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

调试时,String currentUser返回 null。

已调试答案的屏幕截图。调试的答案

4

1 回答 1

1

由于您在check节点处添加了 valueEventListener,因此再次获取子节点没有任何意义(因为用户 ID 是check节点的键,而不是单独的子节点)。

而是尝试dataSnapshot.getChildren();直接调用以获取更新数据的整个列表并遍历它以获得您需要的任何键值。

像这样的东西,

checkUsername.child("check").addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {
       String current value = dataSnapshot.getValue(String.class); 
        Log.d("TAG", "onDataChange: " + current value);
    }

    @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) {}
});

此特定用例中的另一个选项是添加 ChildEventListener 并获取onChildAdded()方法内部的值。

于 2017-08-23T11:29:53.167 回答