Android:AsyncTask中的进度对话框未显示

时间:2013-02-26 23:02:58

标签: android android-asynctask

我正在asynctask内部SherlockListFragment开始SherlockFragmentActivity作为标签在asynctask内创建。

我将onCreate()构造函数传递给我的活动上下文并在AsyncTask<String, Integer, String[]> asynctask = new DownloadFilesTask(getSherlockActivity()).execute(url); 内初始化asynctask:

private ProgressDialog dialog;
private SherlockFragmentActivity activity;

public DownloadFilesTask(SherlockFragmentActivity activity) {
        this.activity = activity;
        this.dialog = new ProgressDialog(activity);
    }

AsyncTask类DownloadFilesTask中的构造函数如下所示:

protected void onPreExecute(){  
        Log.d("AsyncTask!", "Showing dialog now!"); //shown in logcat
        dialog.setMessage("Retrieving all currently airing anime. Please wait.");
        dialog.setCancelable(false);
        dialog.show();  
    }

预执行和后执行看起来像这样:

protected void onPostExecute(String[] result) { 
    Log.d("AsyncTask!", "Dismissing dialog now!"); //shown in logcat
    dialog.dismiss();
}

{{1}}

但是在完成所有后台工作时,进度对话框不显示! 我在这做错了什么?我认为这可能是一个背景问题。

2 个答案:

答案 0 :(得分:4)

由于Mike Repass关于传递一个简单的旧语境的评论,部分问题得到解决。

至于没有显示的对话框...我只是愚蠢,因为我在执行OUTSIDE后阻止了UI线程的AsyncTask后调用.get()。显然,对话框不会以这种方式出现。

答案 1 :(得分:-1)

在Java中“如果你的方法覆盖了它的一个超类方法,你可以通过使用关键字 super 来调用被覆盖的方法。”因此,在启动进度对话框时,请更改onPreExecute()方法:

@Override
protected void onPreExecute(){  
    super.onPreExecute();
    dialog = new ProgressDialog(activity);
    Log.d("AsyncTask!", "Showing dialog now!"); //shown in logcat
    dialog.setMessage("Retreiving all currently airing anime. Please wait.");
    dialog.setCancelable(false);
    dialog.show();  
}