Android Async Задача, связанная с пользовательским интерфейсом - PullRequest
1 голос
/ 07 июля 2011

Я новичок в разработке Android. Я хотел бы выполнить задачу, описанную ниже:

  • Основной актив, который вызывает внешний класс (другой класс будет расширяться AsyncTask) для анализа xml и получения json путем запроса к веб-службе и запускает ProgressDialog.
  • Класс выполняет синтаксический анализ xml и json в своем методе doInBackground.
  • В методе onPostExecute после завершения синтаксического анализа отклоните значение ProgressDialog, заданное в основном действии.
  • Я мог бы сделать это, передав объект ProgressDialog классу синтаксического анализа и исключив тот же объект в его методе onPostExecute.

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

Пожалуйста, предложите. Спасибо

Ответы [ 2 ]

4 голосов
/ 07 июля 2011

Самый простой способ отделить их - использовать интерфейс:

  1. Определить интерфейс обратного вызова (назовем его WorkDoneListener) одним методом: workDone().
  2. Объявите ваш класс активности для реализации WorkDoneListener и реализуйте workDone() для закрытия диалога.
  3. Определите конструктор AsyncTask для принятия WorkDoneListener. Спрятать ссылку в поле члена.
  4. В onPostExecute вызовите метод слушателя workDone().
1 голос
/ 07 июля 2011

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

public class YourActivity extends Activity{
    private class YourAsyncTask extends AsynkTask<etc.>{
    }
}

На самом деле, если вы используете AsyncTask только из этого действия (я имею в виду, если вы неиспользуя его где-либо еще), объявление AsyncTask как внутреннего класса является хорошей практикой проектирования.

...