【问题标题】:How to fetch data from firebase datasnapshot?如何从 Firebase 数据快照中获取数据?
【发布时间】:2019-11-14 01:55:54
【问题描述】:

我对 firebase 数据库几乎没有经验。以下代码不起作用,因为它不会从数据库中检索用户名。但是,它显示了来自 firebase 的 datasnapshot。这是代码。

databaseReference = FirebaseDatabase.getInstance().getReference().child("/userList/"+ FirebaseAuth.getInstance().getUid());
databaseReference.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
        Log.d(TAG, "onChildAdded: " + dataSnapshot.toString());
        for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){
            Users users = dataSnapshot1.getValue(Users.class);
            String firstName = users.getFirstName();
            String lastName = users.getLastName();
            Log.d(TAG, "onChildAdded: " + firstName + " " + lastName);
        }
    }
}

来自 firebase 的 datasnapshot

onChildAdded: DataSnapshot { 
    key = -Lt_5ltPuMx6CPSk5X8-, 
    value = {
      firstName=firstname, 
      lastName=lastname, 
      email=firstname@gmail.com
    } 
}

这是我存储 Firebase 数据的方式。

【问题讨论】:

    标签: java android firebase-realtime-database


    【解决方案1】:

    onChildAdded 回调会为/userList/$uid 下的每个孩子调用。每次调用它时,快照都会包含一个子节点。在回调中,您将遍历该快照的子项,这意味着您的 dataSnapshot1 指的是各个属性(emailfirstNamelastName)。由于这些不是完整的用户节点,dataSnapshot1.getValue(Users.class) 无法从中读取用户。

    简而言之:去掉循环,你应该会得到更好的结果:

    databaseReference = FirebaseDatabase.getInstance().getReference().child("/userList/"+ FirebaseAuth.getInstance().getUid());
    databaseReference.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            Log.d(TAG, "onChildAdded: " + dataSnapshot.toString());
            Users users = dataSnapshot.getValue(Users.class);
            String firstName = users.getFirstName();
            String lastName = users.getLastName();
            Log.d(TAG, "onChildAdded: " + firstName + " " + lastName);
        }
    }
    

    另请参阅以下类似问题:

    【讨论】:

    • 很好,弗兰克!
    • 好的。所以这听起来像你的 Users 类不是默认/无参数构造函数。请务必添加一个 (public Users() {}) 并(如消息所述)确保 Proguard 不会从您的数据类中删除方法。如果您搜索结合 Firebase 的错误消息,您还将获得与此问题相关的命中:google.com/…
    • 谢谢弗兰克。
    猜你喜欢
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    相关资源
    最近更新 更多