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