Android - 从数据库读取Firebase不起作用

时间:2018-02-04 17:56:59

标签: android firebase firebase-realtime-database

我无法使用此代码从我的Firebase数据库中读取(getUser方法)。我已经搜索了2个小时的答案,尝试了不同的教程,没有任何帮助。问题是看起来onDataChange方法从未实际调用过(使用Log测试),我不知道我做错了什么。写入DB(saveUser方法)正常工作。

代码:

public class UserDatabase {

private User user;
private DatabaseReference databaseReference;

public UserDatabase() {
    databaseReference = FirebaseDatabase.getInstance().getReference();
}

public void saveUser(User user) {
    databaseReference.child("users").child(user.getUid()).setValue(user);
}

public User getUser(String uid) {
    databaseReference = FirebaseDatabase.getInstance().getReference().child("users").child(uid);
    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            user = dataSnapshot.getValue(User.class);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
    return user;
} }

感谢您的回答

1 个答案:

答案 0 :(得分:0)

正如我在您的评论中看到的那样,您说“最终获取数据”但我告诉您,您尝试使用getUser()方法作为返回类型{{{ 1}} class,不是解决这个问题的正确方法,特别是在涉及异步方法时。您现在无法返回尚未加载的内容。 User方法具有异步行为。快速解决您的问题的方法是使用仅在onDataChange()方法中从数据库获取的user个对象,或者如果您想在外面使用这些对象,请查看我的最后一部分回答这个post,其中我解释了你可以使用回调来实现这个目的的方式。