我对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数据的方式。
答案 0 :(得分:2)
为onChildAdded
下的每个孩子调用/userList/$uid
回调。每次调用快照时,快照都会包含一个子节点。在回调中,您正在遍历该快照的子级,这意味着您的dataSnapshot1
引用了各个属性(email
,firstName
,lastName
)。而且由于这些节点不是完整的用户节点,因此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);
}
}
也看到这些类似的问题: