我正在做一些繁重的网络任务 - 下载图片(预览) - 对于我的主要UI没有被阻止它在AsyncTask中做了,我想把它们放在GridView中,但我在AsyncTask完成之前设置了适配器。有些代码会更有帮助
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gridview);
new LoadAllPictures().execute();
GridView g = (GridView) findViewById(R.id.gridview);
g.setAdapter(new ImageAdapter(this));
}
所以最后Logcat显示所有内容都已下载但屏幕上没有任何内容。
我尝试在AsyncTask中执行setAdapter部分,但它告诉我:Only the original thread that created a view hierarchy can touch its views.
我该怎么办?
答案 0 :(得分:6)
AsyncTask
有一个有用的方法,您可以实现名为onPostExecute()
的方法。在任务完成后从原始UI线程调用它。您可以使用它从正确的线程设置适配器。
答案 1 :(得分:4)
AsyncTask有3种基本方法:
protected void onPreExecute()
{
}
protected void onPostExecute(Void unused)
{
// displaying images
// set adapter for listview with downloaded items
}
protected Void doInBackground(Void... params)
{
// downloading and time consuming task
}
所以你可以在g.setAdapter(new ImageAdapter(this));
方法中写onPostExecute(Void unused)
因为此时图片已经在doInBackground()
方法中下载了。