AsyncTask等待doInBackground()结束的常规方法

时间:2019-02-08 16:44:59

标签: java android firebase

我有一个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()被调用之前返回。有更好的方法吗?

0 个答案:

没有答案
相关问题