I am currently trying to save data to a Firebase Realtime-Database. I just simply want to save data with
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
while
In my experience the tight loop (the while
loop you have) will block the main thread and keep Firebase from calling onComplete
(which also happens on the main thread.
To prevent the blocking, use something like postDelayed
:
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);
}
});
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (done.get()) {
... Do the thing that requires the data
}
}
}, 1000);
Also see my answer here Setting Singleton property value in Firebase Listener