2017-02-21 10 views
1

検索されたデータでいくつかのアクションを実行する前に、いくつかのFirebaseノードから読みたいと思います。現在、私は以前の要求の完了リスナーで各要求を入れ子にすることでこれを達成しましたが、入れ子にするとコードを維持するのが難しくなります。複数のリクエストを連続して実行する方法と、同時に複数のリクエストを実行する方法がありますか?Firebaseリアルタイムデータベースのいくつかのノードからの読み取りの完了を確認する方法は?

+0

汎用ソリューションがここに表示されています:http://stackoverflow.com/a/38188683/4815718 –

答えて

3

例次の2つの要求を持っていて、それらの両方が完了した後、いくつかのコードを実行し、および/または成功したい場合:

Boolean ref1done = false; 
Boolean ref2done = false; 

// if you need data from snapshot 
DataSnapshot result1; 
DataSnapshot result2; 

ref1done = false; 
dataRef1.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     ref1done = true; 
     result1 = dataSnapshot; 
     doThisAfter(); 
    } 
    ... 
}); 

ref2done = false; 
dataRef2.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     ref2done = true; 
     result2 = dataSnapshot; 
     doThisAfter(); 
    } 
    ... 
}); 

... 

public function doThisAfter() { 
    if (ref1done && ref2done) { 
     // do something 
     // if you need data from snapshot, it can be accessed from result1 and result2 
    } 
} 

これが最善の解決策ではないかもしれないが、私もまだであればそこに探していますより良いものです。または、EventBusを試してみてください。

+1

4つのリクエストに対してパフォーマンス低下が起こるかどうかは分かりませんがそうですね。私はValueEventListenersのArrayListを作成し、それらを1つずつ実行するオブジェクトに渡し、1つのValueEventListenerの完了時に起動して2番目のイベントを処理するカスタムイベントリスナーを使用し、 datasnapshotsのArrayListを返す:) – wilkas

+1

良い解決策が与えられない場合は、明日の回答を受け付けます。 – wilkas

+1

現在、アプリ起動時に同時に5-6リクエストを使用しています。私は1つの要求だけを呼び出すときと比べて大きな違いはないことに気づいた。でも私はまだ学んでいます。あなたは[私が見つけたこのページ](http://stackoverflow.com/questions/35931526/)を見たいかもしれません。 – koceeng

関連する問題