Сбой AsyncTask в doInBackground, добавить в просмотр списка - PullRequest
1 голос
/ 24 февраля 2012

Я получаю сбой, когда пытаюсь запустить функцию doTask () в фоновом режиме.Я пытался с новым потоком (новый Runnable () {}), и он работает только в этом разделе: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

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

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

2 голосов
/ 24 февраля 2012

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

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

...