我想加载数据集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();
....
}
但是数据不可用,在null对象上调用getName函数。
如何获取onCreate()的数据?
答案 0 :(得分:4)
问题是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
}