[英]Trying to retrieve value from Firebase, but getting null?
正如你可以從下面的代碼,我輸出中看到retrievedValue
從里面onDataChange()
如預期其中工程。 但是我不能從另一個地方輸出retrievedValue
到的null
因為它返回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?
這行返回空值! 我怎樣才能解決這個問題?
我不認為您了解異步代碼的工作原理……首先,沒有任何東西返回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) {
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.