我想構建一個方法,返回FireBase
中的child
值。我試圖做這樣的事情:等到firebase檢索到數據
public String getMessage(){
root.child("MessagesOnLaunch").child("Message").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
message = (String) dataSnapshot.getValue();
Log.i("4r398", "work");
}
@Override
public void onCancelled(FirebaseError firebaseError) {
Log.e("error", firebaseError.getMessage());
}
});
return message;
}
的問題是,該方法返回null
這可能是因爲該方法不等到聽衆結束並返回null
因爲它的message
默認值。 如何使此方法等待,直到偵聽器發生,然後返回該值。
假設root存儲在類中(並且類未被gc化)函數完成應該沒關係 –
不能同步返回異步值。這裏的message變量是完全沒有意義的,因爲它不會在返回時被設置 - 數據必須先從服務器獲取。相反,getMessage()應該接受某種類型的回調或觸發事件。有[專門介紹這些概念的指南](https://www.firebase.com/docs/android/),充滿了例子和建議。 – Kato
[使用此答案](http://stackoverflow.com/a/38542796/4882204)。我遇到了同樣的問題,並使用EventBus解決。 –