2016-03-19 9 views
0

私が現在開発中のFirebase Androidアプリでは、エクスポート機能を提供したいと考えています。この機能を使用すると、Firebaseに保存されている一連のデータをエクスポートできます。Firebaseからのデータの非同期収集:データセットはいつ完了しますか?

私は、必要なすべてのデータを複数のエクスポートタイプに使用できる中間オブジェクト(データ構造)に集約することを計画しています。

使用しているフラットベースのFirebaseデータ構造(https://www.firebase.com/docs/android/guide/structuring-data.htmlで説明)のため、エクスポートに必要なすべてのデータがいつ収集されたかを知ることは困難です。

例:'indices '(name:key、value true)を使用して参照されるすべてのオブジェクトを取得するとき、私はaddListenerForSingleValueEventリスナーを設定しましたが、これは非同期を返すため、検索されます。このようにして、エクスポートを開始する正しい瞬間を判断することはできません。

誰もこれに対処するベストプラクティスを持っていますか?

+0

一つの方法は、あなたがロードし、デクリメントを開始した指標の数を維持することですが1つ戻る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

あなた自身の答えを受け入れることを忘れないでください! –

関連する問題