Android doBackground异步任务中出错?

Android doBackground异步任务中出错?,android,Android,我的doInBackground()中不断出现错误 这是我的asyncTask方法 private class MyTask extends AsyncTask<Void, Void, Void>{ @Override protected Void doInBackground(Void... arg0) {try { getIm

我的doInBackground()中不断出现错误

这是我的asyncTask方法

                private class MyTask extends AsyncTask<Void, Void, Void>{


                @Override
                protected Void doInBackground(Void... arg0) {try {
                            getImages();
                            Log.v("MyTask", "Image 1 retreived");
                            getImage2();
                            Log.v("MyTask", "Image 2 retreived");
                            getImage3();
                            Log.v("MyTask", "Image 3 retreived");
                            getImage4();
                            Log.v("MyTask", "Image 4 retreived");
                        } catch (IOException e) {
                            Log.e("MainMenu retreive image", "Image Retreival failed");
                            e.printStackTrace();
                        }
                    return null;
                }

                protected Void onPostExecute(){
                    ((Gallery) findViewById(R.id.gallery))
                            .setAdapter(new ImageAdapter(MainMenu.this));
                    return null;

                }

                        }

}

Yoshi你会真的想把你的任务中的所有东西都转移过来。将load images函数放入do in background方法中,然后在setListAdapter调用onPostExecute方法时,Doinbackground方法不能更改或更新视图,但是onPostExecute应该能够

 protected void onPostExecute(Exception error) {
        try {
            if (error == null) {
                ((Gallery) findViewById(R.id.gallery))
                        .setAdapter(new ImageAdapter(MainMenu.this));

            } else

            throw error;
        } catch (Throwable t) {

        }
    }

当您不在UI线程中时,无法操作UI


我要冒险一试,猜想您耗时的调用是
getImages()
。如果是这种情况,这些方法调用应该发生在
doInBackground()
方法中,并且当前在
doInBackground()
方法中的代码可能应该移动到
onPostExecute()
方法中。

您需要阅读
AsyncTask
中的各种方法。按照编写的方式,您正在UI线程上检索图像,并尝试在单独的线程中设置适配器(这就是为什么会出现错误)。您的
onPostExecute()
将不会被调用,因为它不是
AsyncTask
接口的一部分,因为它没有覆盖正确的方法。您指定的泛型建议onPostExecute方法将一个Void对象作为参数来完成
AsyncTask
契约。方法声明应该如下所示:
onPostExecute(Void notUsed)
。这就是为什么
@Override
注释非常有用的原因。因此@Override-protectedvoid-onPostExecute(void-notUsed){return;{我不认为您的意思是在
try-catch
中包含它。
抛出错误;
行将被捕获在
catch(Throwable t)中
@jared查看我更新的AsyncTask方法。onPostExecute从未被调用。只有do在后台
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


MyTask myTask = new MyTask();

    myTask.execute();

}
 protected void onPostExecute(Exception error) {
        try {
            if (error == null) {
                ((Gallery) findViewById(R.id.gallery))
                        .setAdapter(new ImageAdapter(MainMenu.this));

            } else

            throw error;
        } catch (Throwable t) {

        }
    }