在Android中等待Firebase異步檢索數據我需要存儲他自己異步的FireBase getValue方法的結果。我不能使用類似“onPostExecute()”的東西,為了我的目的,我無法執行“onDataChange()”的所有操作,因為我需要在將來的其他活動中引用一些參考。這是我的片段檢索數據: List<Village> villages = new LinkedList<>();
Firebase ref = new Firebase("MYFIREBASEURL").child("village");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
spinnerArray.clear();
for (DataSnapshot postSnapshot : snapshot.getChildren()) {
Village v = postSnapshot.getValue(Village.class);
villages.add(v);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});如果我嘗試從“onDataChange”中讀取村莊,我自然會為他的異步生活讀取空值。有一種方法可以確保調用onDataChange嗎?
3 回答
侃侃爾雅
TA貢獻1801條經驗 獲得超16個贊
對不起,如果這不是你想要的,因為我的英語太糟糕了。您可以定義一個偵聽器接口來處理它。例:
public interface OnGetDataListener {
public void onStart();
public void onSuccess(DataSnapshot data);
public void onFailed(DatabaseError databaseError);}我創建了一個自定義函數來獲取Database.class中的數據:
public void mReadDataOnce(String child, final OnGetDataListener listener) {
listener.onStart();
FirebaseDatabase.getInstance().getReference().child(child).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
listener.onSuccess(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError databaseError) {
listener.onFailed(databaseError);
}
});}當我想從Main.class獲取數據時,我會:
private void mCheckInforInServer(String child) {
new Database().mReadDataOnce(child, new OnGetDataListener() {
@Override
public void onStart() {
//DO SOME THING WHEN START GET DATA HERE
}
@Override
public void onSuccess(DataSnapshot data) {
//DO SOME THING WHEN GET DATA SUCCESS HERE
}
@Override
public void onFailed(DatabaseError databaseError) {
//DO SOME THING WHEN GET DATA FAILED HERE
}
});}通過這種方式,您可以重用您的方法并處理數據。
- 3 回答
- 0 關注
- 402 瀏覽
添加回答
舉報
0/150
提交
取消
