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