現在、Firebase Realtime-Databaseにデータを保存しようとしています。RealTimeDatabaseの.setValueに対してOnCompleteListenerが呼び出されていません
databaseReference.child("someChild").setValue(someObject);
Thread.sleep(1000);
でデータを保存するだけで、これで問題はありません。オブジェクトがコンソールに表示され、すべてが機能します。しかし、よりスムーズな実装があった場合、私は疑問に思ったので、私はOnCompleteListener
を使用しようとしましたし、次のコード働い:
final AtomicBoolean done = new AtomicBoolean(false);
databaseReference.child("someChild")
.setValue(someObject)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
System.out.println("completed");
done.set(true);
}
});
while (!done.get());
ここでも、データがデータベースに正常に書き込まれているのが、onCompleteListener
は全く呼び出されませんしたがってwhile
-loopは中断されません。
リスナーが呼び出されないのはなぜですか?私は他の設定もしましたが(while
-loopなし)、これらは動作しませんでした。
ありがとうございます。
残念ながら問題を解決していない参照のことだった場合は、 'OnComplete'、リスナーがまだ(と呼ばれていません。 、私はSystemOutputでそれを見たでしょう) – cpt
'AtomicBoolean'とそれを取り除くと、' onComplete() 'が呼び出されますか?その場合、削除したコードが 'onComplete()'の呼び出しをブロックしていることが明らかです。 –
「AtomicBoolean」が本当に問題であることが判明しました。ご協力いただきありがとうございます! – cpt