从onPostExecute调用时更改UI崩溃

时间:2014-07-24 07:31:03

标签: java android multithreading android-asynctask

我无法在 DialogFragment

中修改UI onPostExecute

我已经阅读了有关此内容的所有问题。这不是同一个案例。相信我。

我知道AsyncTask doInBackground函数有自己的线程,你必须触摸onPreExecute和onPostExecute中的视图。 所有这些东西,应用程序仍在崩溃。

我得到的例外是:

E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at .onPostExecute(CustomDialogFragment.java:310)     
            at android.os.AsyncTask.finish(AsyncTask.java:631)                

Can't touch views from onPostExecute's AsyncTask

3 个答案:

答案 0 :(得分:0)

而不是activity.runOnUiThread使用getActivity()。runonUiThread

答案 1 :(得分:0)

正如@Raghunandan正确提到的那样,在UI线程上调用了onPostExecute,因此不需要runOnUiThread

更改AsyncTask以在其构造函数中获取Context:

private class DownloadFilesTask extends AsyncTask<String,String,String> {

    private Context context;
    public DownloadFilesTask(Context context) {
            super();
            this.context = context;
    }

并像这样使用它:

@Override
protected void onPostExecute(String result) {
        super.onPostExecute(result);

        Toast.makeText(context, 
                      "why onPostExecute not work", Toast.LENGTH_SHORT).show();

}

不要忘记使用上下文实例化AsyncTask:

final DownloadFilesTask downloadTask = new DownloadFilesTask(getActivity());

答案 2 :(得分:0)

问题比看上去要深刻得多。

真正的问题是因为我从onPostExecute使用Toast.show()和dimiss()对话框。 小时间延迟(100ms)解决了这个问题