PublishProgress не вызывает onProgressUpdate

У меня есть AsyncTask, который использует опросы в очереди, чтобы узнать, прибыл ли новый объект. Когда он обнаруживает новый объект, я собираю информацию в виде строки, а затем публикуюProgress (info). В onProgressUpdate он добавляет строку в список. Проблема, с которой я сталкиваюсь, заключается в том, что программа никогда не входит в onProgressUpdate. Я прошел через него в отладчике, и я вижу, что он вызывает publishProgress, однако он никогда не вводит обновление onProgress. Выглядит примерно так:

@Override protected void onProgressUpdate(String... values) { messageQueue.add(displayName + " : " + values[0]); //I have a breakpoint here that the program never hits. ((BaseAdapter) getListAdapter()).notifyDataSetChanged(); super.onProgressUpdate(values); } @Override protected Void doInBackground(Void... params) { while (true) { Packet p = pc.pollResult(); if(p != null){ String body = ((Message) p).getBody(); //I have a breakpoint here that the program hits only when a new object is in the queue publishProgress(body); } } } 

У меня была проблема, когда она не вызывалась, но я только заметил, что я помещаю не в тот класс. Конечно, предполагается, что он находится внутри блока AsyncTask, но instaead я создал его вне этого блока

Из http://developer.android.com/reference/android/os/AsyncTask.html

Правила потоковой передачи

Для правильного функционирования этого класса необходимо соблюдать несколько правил потоковой передачи:

 execute(Params...) must be invoked on the UI thread. 

Это может помочь кому-то с неподдельной ошибкой

Обратите внимание, что второй аргумент в AsyncTask относится к Progress

 AsyncTask<Params, Progress, Result> 

Убедитесь, что ваш тип данных совпадает.

 AsyncTask<URL, String, Long>{ protected Long doInBackground(URL... urls) { return long; } protected void onProgressUpdate(String... values) {} protected void onPostExecute(Long result) {} } 
Intereting Posts