我想在 oncreate() 上加载一个数据集。
由于数据不会改变,我使用一次性加载器:
protected void onCreate(Bundle savedInstanceState) {
....
mDatabase.child("users").child(userId).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
currentUser = dataSnapshot.getValue(Users.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "error:", databaseError.toException());
}
});
String name = currentUser.getName();
....
}
但是数据不可用,在空对象上调用了 getName 函数。
如何获取 onCreate() 的数据?
最佳答案
问题是 Firebase 使用异步监听器来引用数据库,并且您将 name
变量设置为 null currentUser
。
尝试将名称 var 声明为 final 并在监听器之前,并在 firebase 回调中设置他的值。
更新: 如何实现和使用“覆盖”功能的示例:
final String name;
mDatabase.child("users").child(userId).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
currentUser = dataSnapshot.getValue(Users.class);
name = currentUser.getName();
fooFunc(name); // calling a function with data
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "error:", databaseError.toException());
}
});
@Override
public void fooFunc(String name) {
// name != null, when called from the the callback
// dont forget to check it
}
关于android - Firebase 加载数据 onCreate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38028171/