从下面的代码中可以看出,我从retrievedValue
内部输出onDataChange()
,它按预期工作。但我无法从其他地方输出retrievedValue
,因为它会返回null
。
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
retrievedValue = (Long) dataSnapshot.getValue();
System.out.println(retrievedValue); //this line works
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
System.out.println(retrievedValue); //this line returns null! How can I fix this?
答案 0 :(得分:1)
此行返回null!我该如何解决这个问题?
我认为你不理解异步代码是如何工作的......首先,没有任何东西返回null。 尚未分配。
您的代码与此完全相同。
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
System.out.println(retrievedValue); //this line returns null!
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
retrievedValue = (Long) dataSnapshot.getValue();
System.out.println(retrievedValue); //this line works
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
没有什么可以解决的,因为您使用Firebase时出错了。
如果您需要retrievedValue
,那么您应该将所有相关代码放入(或之后,如通过其他方法)onDataChange
例如
private Long retreivedValue; // starts as null
public static void updateSomething(Long data) {
System.out.println(data); // this line works
}
public static void main(String... args) {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
retrievedValue = (Long) dataSnapshot.getValue();
updateSomething(retrievedValue);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});