下記の処理にて、Firebaseのrealtimedbで、一旦メインスレッドを wait(latch.await())して、
onDataChange非同期メソッドにてデータ取得が完了したらメインスレッドの次の処理に進むようにしたいのですが、await()メソッドを記述するとそもそも、onDataChangeメソッドに入れずに、次の処理に進めません。
原因がわからないため、解決策を教えていただきたいです。
よろしくお願いします。
Java
1public class TalkActivity extends BaseActivity implements View.OnClickListener{ 2 @Override 3 protected void onCreate(Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 FirebaseDatabase database = FirebaseDatabase.getInstance(); 6 7 DatabaseReference myRef = database.getReference("messages/" + roomId + "/"); 8 final DataSnapshotWrapper snapshotWrapper = new DataSnapshotWrapper(); 9 10 //非同期処理のカウント変数(初期値が1) 11 final CountDownLatch latch = new CountDownLatch(1); 12 13 //DBを読み出し 14 myRef.addValueEventListener(new ValueEventListener() { 15 @Override 16 public void onDataChange(@NonNull DataSnapshot dataSnapshot) { 17 DatabaseReference subRef; 18 snapshotWrapper.snapshot = dataSnapshot; 19 20 //データ処理が完了したのでカウントを一つ減らす。 21 latch.countDown(); 22 messageDataBeanList.clear(); 23 mainDataSnapShot = dataSnapshot; 24 } 25 26 @Override 27 public void onCancelled(@NonNull DatabaseError error) { 28 // Failed to read value 29 Toast.makeText(context, "DB読み込みに失敗しました。", Toast.LENGTH_LONG).show(); 30 } 31 }); 32 33 try { 34 System.out.println("Prelatch"); 35 36 //カウントダウン変数(latch)が0になるまで(上記の非同期処理が完了したら)待機 37 latch.await(); 38 System.out.println("Returning from latch"); 39 } catch (InterruptedException e) { 40 e.printStackTrace(); 41 } 42 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。