AsyncTask 在 doInBackground 中崩溃,添加到 listview
Posted
技术标签:
【中文标题】AsyncTask 在 doInBackground 中崩溃,添加到 listview【英文标题】:AsyncTask crashes in doInBackground, add to listview 【发布时间】:2012-03-14 10:10:26 【问题描述】:当我尝试在后台运行函数 doTask() 时发生崩溃。我正在尝试使用 new Thread(new Runnable() ) 并且它仅适用于本节: handlerForBar.post(new Runnable() public void run() doTask(); ) 但是当 doTask() 的工作完成时会出现progressBar。所以我认为 AsyncTask 可以工作,但是它崩溃了。
public void doTask()
ListView listView = (ListView)findViewById(R.id.list);
myArray = new ArrayList<HashMap<String,Object>>();
HashMap<String, Object> hash_map;
hash_map = new HashMap<String, Object>();
hash_map.put(NICK_KEY, "nick");
myArray.add(hash_map);
listView.setAdapter(new myListAdapter(myArray,this));
new myListAdapter(myArray,this).notifyDataSetChanged();
private class myThread extends AsyncTask<String, Void, String>
@Override
protected String doInBackground(String... params)
doTask(); //try, catch also FC
return null;
...
*.java的结构:
> public class mainActivity extends Activity
> public void onCreate()
> new myThread().execute("");
> public void doTask()
> private class myThread extends AsyncTask<String, Void, String>
> protected String doInBackground()
> doTask()
> private class myListView extends BaseAdapter
【问题讨论】:
【参考方案1】:doInBackground
中的 UI 无法触摸,您必须在 onProgressUpdate
或 onPostExecute
等方法中更新 UI。见here
【讨论】:
【参考方案2】:您不能在doInBackground
方法中操作 ListView。而是在onPostExecute
中执行此操作。简而言之,所有需要 UI 更新的操作都需要在 UI 线程上完成,而在 AsyncTask 中它在 post execute 中工作
提示:在 doInBackground 中的适配器中插入项目,然后在 onPostExecute 中将其设置为列表
【讨论】:
以上是关于AsyncTask 在 doInBackground 中崩溃,添加到 listview的主要内容,如果未能解决你的问题,请参考以下文章
AsyncTask 替代背景图像下载? (AsyncTask ---------已弃用)
Android AsyncTask get()形成另一个AsyncTask()
AsyncTask onCancelled(Object) 从未在 asyncTask.cancel(true) 之后调用;