dataSnapshot具有对象,但getValue()将返回null

时间:2017-06-28 19:58:34

标签: android firebase firebase-realtime-database

所以我现在正在努力解决这个问题大约三个小时。
我有这个用户类

public class User {
private String user_id;
private String userName;
private long phoneNumber;

public User() {
}

public User(String user_id, String userName, long phoneNumber) {
    this.user_id = user_id;
    this.userName = userName;
    this.phoneNumber = phoneNumber;
}

我想从Firebase数据库中获取此类的一些实例我正在使用此代码执行此操作:
数据库参考;

User currentUser;
DatabaseReference database = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference usersRef = database.child("users");

查询代码:

Query query = usersRef.orderByChild("user_id").equalTo(user_id);
                query.addListenerForSingleValueEvent (new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                         currentUser = dataSnapshot.getValue(User.class);
}

有趣的是:这段代码实际上工作了一次,但我猜想我做了一些修改,现在getValue()返回null;
 这是我在firebase中的数据库
enter image description here
当我调试应用程序时,dataSnapshot实际上包含我正在寻找的对象
enter image description here
但是currentUser将是一个对象,其所有字段都为null;
enter image description here
有任何想法吗?我已经非常沮丧了:( 提前谢谢!

3 个答案:

答案 0 :(得分:5)

您需要迭代dataSnapshot.getChildren( ...例如

                for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
                    User user = childSnapshot.getValue(User.class);
                 }

答案 1 :(得分:2)

我也遇到了同样的问题,原来是因为类(在您的情况下为User.class)没有用于所需变量的setter方法

答案 2 :(得分:1)

如果在 firebase 实时数据库规则中将读取权限设置为 false,它也可以返回 null。将其设置为 true 将返回值。