Мне нужно, чтобы doinBackground () зациклился / ожидал получения данных перед вызовом onPostExecute ();
У вызовов данных из Firebase есть время ожидания. Я знаю, что у нас есть функция get (), но этот тип талии в миллисекундах, я ищу обходной путь, при котором мне не нужно делать логическую проверку, просто подождите данные и затем вызовите следующуюнить оттуда. таким образом, переход может двигаться плавно.
private class GetDatafromFirebaseLoop extends AsyncTask<Void,Void,Void>{
private boolean dataRecieved = false;
String FirstName,MiddleName,LastName;
@Override protected void onPreExecute() {
User.Id = FirebaseAuth.getInstance().getCurrentUser().getUid();
runOnUiThread(new Runnable() {
@Override public void run() {
mTitle.setText("UserId : ");
mQuestion.setText(User.Id);
}
});
super.onPreExecute();
}
@Override protected Void doInBackground(Void... voids) {
FirebaseDatabase.getInstance().getReference("UsersInfo").child(Users.Id).addListenerForSingleValueEvent((new ValueEventListener() {
@Override public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists() && dataSnapshot.getChildrenCount() > 0) {
Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
if (map.get("FirstName") != null) {
FirstName = map.get("FirstName").toString();
}
if (map.get("MiddleName") != null) {
MiddleName = map.get("MiddleName").toString();
}
if (map.get("LastName") != null) {
LastName = map.get("LastName").toString();
}
}
}
@Override public void onCancelled(DatabaseError databaseError) {}
}));
return null;
}
@Override protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if(dataRecieved){
dataRecieved = false;
mTitle.setText("FullName");
mQuestion.setText(FirstName + " " + MiddleName + " " + LastName);
New RunNewAsyncTask().execute();// Which also continues this same format for other data.
}
else {
execute(new Runnable() {
@Override public void run() {
doInBackground();
}
});
}
}
}