2016-03-19 13 views
0

我想提供導出功能。此功能應允許用戶導出存儲在Firebase中的一組數據。異步收集Firebase中的數據:數據集何時完成?我正在開發的Firebase Android應用中的

我的計劃是將所有需要的數據收集到一箇中間對象(數據結構)中,該中間對象可以(重新)用於多種導出類型。

我遇到了問題,由於我使用的扁平Firebase數據結構(如在https://www.firebase.com/docs/android/guide/structuring-data.html中所述),很難知道導出所需的所有數據何時收集完畢。

示例:當使用'indices'(name:key,value true)檢索引用的所有對象時,我設置了一個addListenerForSingleValueEvent偵聽器,但由於這會返回異步,因此無法確定何時所有索引被檢索。這樣就無法確定開始導出的正確時刻。

誰有應對此最佳做法?

+0

一種方式是讓你開始加載和減量當指數的計數一個返回。當你達到0時,你就完成了。 –

+0

你正在將這些數據導出到一個扁平的ascii文件嗎? – Jay

+0

@Jay不,在這種情況下,但可能在未來的應用程序。你問來幹什麼? – Peter

回答

1

張貼這表明@FrankvanPuffelen的,似乎做的工作相當好評論的制定例如:

@Override 
public void onDataChange(DataSnapshot indexListDataSnapshot) { 
    final long participantsRequired = indexListDataSnapshot.getChildrenCount(); 

    for (DataSnapshot ds : indexListDataSnapshot.getChildren()) { 
     DataUtil.getParticipantByKey(mEventKey, ds.getKey()).addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       Participant p = dataSnapshot.getValue(Participant.class); 
       mParticipants.add(p); 

       if (participantsRequired == mParticipants.size()){ 
        executeExport(); 
       } 
      } 

      @Override 
      public void onCancelled(FirebaseError firebaseError) { 
       mListener.onDataLoadFailure(firebaseError.toException()); 
      } 
     }); 
    } 
} 
+0

不要忘記接受你自己的答案! –

相關問題