如何从Firebase DataSnapshot获取数据?

时间:2019-11-13 17:35:44

标签: java android firebase-realtime-database

我对Firebase数据库的经验很少。以下代码不起作用,因为它不会从数据库中检索用户名。但是,它显示了Firebase中的public class InputSetter implements PreparedStatementSetter { @Override public void setValues(PreparedStatement ps) throws SQLException { ps.setString(1, "status"); ps.setString(2,"Name"); } 。这是代码。

datasnapshot

firebase中的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); } } }

datasnapshot

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

firebase data

1 个答案:

答案 0 :(得分:2)

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

也看到这些类似的问题: