Сбой AsyncTask в doInBackground, добавить в просмотр списка

1

Я получаю сбой, когда пытаюсь запустить функцию 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
Теги:
multithreading
android-asynctask
listview
crash

2 ответа

2
Лучший ответ

Вы не можете коснуться пользовательского интерфейса в doInBackground, вам нужно обновить интерфейс в таких методах, как onProgressUpdate или onPostExecute. См. Здесь

2

вы не можете манипулировать ListView в doInBackground. вместо этого выполните это в onPostExecute. Короче говоря, все операции, требующие обновления пользовательского интерфейса, должны выполняться в потоке пользовательского интерфейса, а в AsyncTask он работает в post execute

Подсказка: вставьте элементы в свой адаптер в doInBackground, а затем установите его в списке в onPostExecute

Ещё вопросы

Сообщество Overcoder
Наверх
Меню