У меня есть действие Android, которое захватывает канал RSS от URL и использует синтаксический анализатор SAX для засовывания каждого объекта от XML в массив. Это все хорошо работает, но, как ожидалось, занимает немного времени, таким образом, я хочу использовать AsyncActivity, чтобы сделать это в фоновом режиме. Мой код следующие:
class AddTask extends AsyncTask<Void, Item, Void> {
protected void onPreExecute() {
pDialog = ProgressDialog.show(MyActivity.this,"Please wait...", "Retrieving data ...", true);
}
protected Void doInBackground(Void... unused) {
items = parser.getItems();
for (Item it : items) {
publishProgress(it);
}
return(null);
}
protected void onProgressUpdate(Item... item) {
adapter.add(item[0]);
}
protected void onPostExecute(Void unused) {
pDialog.dismiss();
}
}
Который я призываю onCreate()
с
new AddTask().execute();
Строка items = parser.getItems()
хорошо работает - items
будучи arraylist, содержащим каждый объект от XML. Проблема, с которой я сталкиваюсь, состоит в том, что при запуске действия, ProgressDialog, в котором я создаю onPreExecute()
не отображен до окончания doInBackground()
метод закончился. т.е. Я получаю черный экран, длинную паузу, затем абсолютно заполненный список с объектами в. Почему это происходит? Почему UI не тянет, показ ProgressDialog, синтаксический анализатор, получая объекты и инкрементно добавляя их к списку, затем отклонение ProgressDialog?
У меня работает
@Override
protected void onPreExecute() {
dialog = new ProgressDialog(viewContacts.this);
dialog.setMessage(getString(R.string.please_wait_while_loading));
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();
}