Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

Как загрузить данные из БД, показывая процесс ProgressDialog'ом

#android


Мне нужно загрузить данные из базы данных в ArrayList, вo втором потоке, сопровождая
выгрузку DialogFragment'ом. При помощи чего это можно сделать?



Хотел сделать через IntentServise, но он не дружит с List'ами (насколько я понял).
Проповал запустить выгрузку во втором потоке, остановивши первый, но ProgressDialog
спит с основным потоком. Даже пробовал сделать все в основном потоке, но ProgressDialog
не успевает запуститься и зависает с основным потоком...
    


Ответы

Ответ 1



Делается это через AsyncTask, примерная схема такая: Создаем класс наследующий от AsyncTask В конструкторе класса создаем ProgressDialog В методе onPreExecute() показываем диалог progressDialog.show(), проводим другие мероприятия - подготовку у чтению БД и проч. В методе doInBackground() организуем чтение данных из БД в цикле и в ходе чтения вызываем this.publishProgress(), который будет вызывать onProgressUpdate() (см. ниже) В методе onProgressUpdate() увеличиваем счетчик progressDialog.setProgress() В методе onPostExecute() закрываем счетчик progressDialog.dismiss()

Ответ 2



Попробуйте сделать через AsyncTask, у него есть методы onPreExecute и onPostExecute, которые выполняются соответственно, перед и после doInBackground на UI потоке (точнее на потоке, который вызвал execute() у AsyncTask). Показывайте и прячте ваш DialogFragment в этих методах, а загрузку из базы сделайте в doInBackground

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

Отправить комментарий