Диалог прогресса в Android с некоторой фоновой логикой выдает ошибку обработчика? - PullRequest
2 голосов
/ 19 ноября 2011

Кто-нибудь имеет представление о ProgressDialog Andorid с Thread?Я успешно могу отобразить диалоговое окно и также закрыть его, но у меня есть некоторая длинная логика, которую нужно сделать, а затем только закрыть диалоговое окно, пока в этом диалоговом окне не отобразится сообщение о загрузке.Я поместил свой логический код в метод потока Thread с условием Пока, что пока я не получу конкретный результат, он будет запускать код.Но как-то это дает Handler и Looper.prepare() ошибку.Я пытаюсь найти это и узнать, что я должен использовать функциональность класса Handler.

Ответы [ 2 ]

1 голос
/ 19 ноября 2011

ProgressDialog находится под UserInterface.Donot распускает его внутри потока и показывает перед запуском потока;

вот так.

 Thread th=new Thread(this);
 ProgressDialog pd=new ProgressDialog(this);
 pd.setMessage("Loading...");
 pd.show();
 th.start();

Теперь возьмем класс обработчика, чтобы закрыть его

void run(){
 ///do your work;
 handler.sendEmptyMessage(0); 
 }
 private Handler  handler=new Handler(){
   //override onhandle message method and dismiss dialog in it

  }
0 голосов
/ 19 ноября 2011

Для того же, вы можете реализовать концепцию AsyncTask , которая является очень предпочтительной в Android для реализации задачи многопоточности, реализуя эту задачу, сама система обрабатывает задачу многопоточности, такую ​​как start, run, stop. ...так далее. и именно поэтому он известен как безболезненная резьба .

Если вы прошли по ссылке AsyncTask , то я уверен, что вы заметили эти 4 метода AsyncTask.

Для вашей проблемы вы можете реализовать AsyncTask, как показано ниже:

  1. onPreExecute () - Показать диалоговое окно хода выполнения
  2. doInBackground () - реализовать все долгосрочные задачи
  3. onPostExecute () - закрывать диалог прогресса, вызывая dialog.dismiss();

Я уверен, что ты понял это сейчас.

Всего наилучшего.

Обновление:

вам просто нужно написать метод Dialog.Show () внутри метода onPreExecute () и dialog.dismiss () внутри метода onPostExecute (). И да, я говорил 1000 раз, что вы не можете написать Toast непосредственно в методе doInBackground (), потому что Android не позволяет работать в основном потоке, и если вы все еще хотите его выполнить, напишите то же самое сообщение Toast внутри Метод runOnUiThead (этот метод должен быть внутри doInBackground ().

...