0
我想讀取我的數據庫中的節點,並返回在單一方法中檢索到的值。當我運行代碼時,數據會記錄在控制檯上,但該方法返回空值。如何從onDataChanged返回數據方法
我所知道的:
我知道,在火力地堡裏,因此在onDataChanged代碼是最後執行的後臺自動檢索/同步與數據庫。
什麼,我不知道:
如何讓我的方法返回從onDataChanged方法得到的值。
我的代碼:
public static String telephone;
public static String getMyNumber(){
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference r = FirebaseDatabase.getInstance().getReference().child("users").child(user.getUid()).child("phone");
r.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
telephone = dataSnapshot.getValue(String.class);
Log.d("YourTag", telephone);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return telephone;
}
你'getMyNumber'方法同步運行在主線程中的代碼。數據是從Firebase數據庫在單獨的線程上異步檢索的。如果您的目標是常規Java/JVM,則可以使用信號燈來同步這兩者。在Android上,這是不可能的。看到我的答案在這裏:http://stackoverflow.com/questions/33203379/setting-singleton-property-value-in-firebase-listener/33204705#33204705 –
好的感謝評論。我正在使用Android。 –
在這種情況下,您沒有其他選擇,然後擁抱Firebase的異步特性(以及大多數現代雲服務)。 –