Я получаю сбой, когда пытаюсь запустить функцию doTask() в фоновом режиме. Я пытался с помощью нового Thread (new Runnable() {}), и он работает только в этом разделе: handlerForBar.post(new Runnable() {public void run() {doTask();}}), но progressBar появляется, когда работа of doTask() завершено. Поэтому я подумал, что 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
Вы не можете коснуться пользовательского интерфейса в doInBackground
, вам нужно обновить интерфейс в таких методах, как onProgressUpdate
или onPostExecute
. См. Здесь
вы не можете манипулировать ListView в doInBackground
. вместо этого выполните это в onPostExecute
. Короче говоря, все операции, требующие обновления пользовательского интерфейса, должны выполняться в потоке пользовательского интерфейса, а в AsyncTask он работает в post execute
Подсказка: вставьте элементы в свой адаптер в doInBackground, а затем установите его в списке в onPostExecute