我有一个Firebase数据库,我在应用程序启动时将数据加载到主视图中。我使用下面的代码通过AsyncTask处理数据加载(我有一个类级别的boolean dlComplete = false):
private class DownloadHandler extends AsyncTask {
@Override
protected Object doInBackground(Object[] objects) {
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//Load data from Firebase
dlComplete = true;
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
// Failed to read value
dlComplete = true;
}
});
while (!dlComplete) {
SystemClock.sleep(50);
}
return null;
}
@Override
protected void onPostExecute(Object o) {
//fill adapter and recyclerview with the data retrieved
}
}
我知道让线程忙于等待是非常糟糕的做法,但是我无法找到更好的方法来等待数据加载。问题在于onPostExecute()方法在下载完成之前被调用,而我不得不以某种方式阻止doInBackground()方法在onPostExecute()被调用之前返回。有更好的方法吗?