Android обновляет данные пользовательского интерфейса из AsyncTask

#android #android-emulator

#Android #android-эмулятор

Вопрос:

привет, я использую AsyncTask для загрузки файлов Xml, изображений с URL, после загрузки XML-файлов я собираюсь проанализировать и отобразить данные в ListView из ImageView и TextView. я знаю, как обновить пользовательский интерфейс в
onPreExecute() onPostExecute(Void result) если, например, я загружаю 100 xml-файлов методом doInBackground (), я хочу обновлять представление списка для каждых 10 завершенных загрузок xml, я использую обработчик для обновления представления списка путем отправки сообщения. он будет принудительно закрыт из-за обработчиков, кто-нибудь может подсказать мне, как это сделать…Может ли кто-нибудь сказать мне, как решить мою проблему…

Комментарии:

1. Покажите нам свой код. Покажите, как и где вы создаете свой Handler и как вы используете его в AsyncTask

Ответ №1:

Я бы не стал использовать обработчик, если вы используете AsyncTask, поскольку у него уже есть встроенный механизм для обновления потока пользовательского интерфейса из фонового потока.

Вы можете передавать обновления в поток пользовательского интерфейса, используя метод onProgressUpdate(). Как onPostExecute () и onPreExecute (), он также выполняется в потоке пользовательского интерфейса. Чтобы передать объект в поток пользовательского интерфейса, вы должны вызвать publishProgress() в doInBackground().

Комментарии:

1. вы правы, но я использую Mvc, поэтому я загружаю данные в класс модели, как я могу использовать publishProgress () для обновления пользовательского интерфейса. пожалуйста, скажите мне

2. Если ваша AsyncTask является внутренним классом вашего действия, тогда вы можете получить доступ к методам действия. Таким образом, вы можете реализовать метод в activity, который обновляет представление путем извлечения данных из модели. Этот метод должен быть вызван из onProgressUpdate(), который, в свою очередь, уведомляется после вызова publishProcess() в doInBackground(). Конечно, необходимо обновить модель перед вызовом publishProcess().