【问题标题】:Firebase datasnapshot.getValue() returns nullFirebase datasnapshot.getValue() 返回 null
【发布时间】:2017-08-23 11:19:51
【问题描述】:

在我的应用程序中,我使用了 Firebase 数据库并将用户 ID 存储在一个孩子中,并将孩子的值设置为用户名以获取当前用户的用户名。现在我使用 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。

已调试答案的屏幕截图。

【问题讨论】:

  • addValueEventListener 如果一个对象使用,但这里有两个你应该使用ChildEventListener 来获取它们
  • @AhmedAbd-Elmeged,它仍然返回 null...
  • getUserId() 的价值是什么
  • getUserId() 是返回用户id的String值的方法...
  • 请检查您是否从getUserId()得到正确的值

标签: android firebase firebase-realtime-database getvalue


【解决方案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() 方法中的值。

【讨论】:

  • 检查更新的答案和屏幕截图。它仍然返回 null。
  • 我应该在那里输入 ds 而不是 datasnapshot 但我已经检查过了,即使是 ds 它仍然返回 null。
  • @Simon 直接调用ds.getValue(String.class); 看是否返回null
  • 仍然返回 null :(
  • 检查更新的答案,看看它是否解决了问题,
猜你喜欢
  • 1970-01-01
  • 2021-09-28
  • 2020-01-26
  • 2017-02-19
  • 2017-11-26
  • 2022-01-16
  • 2018-09-14
  • 2017-01-19
  • 1970-01-01
相关资源
最近更新 更多