Как поднять тост в AsyncTask, мне предложили использовать Looper - PullRequest
26 голосов
/ 15 мая 2010

У меня есть задачи, выполненные AsyncTask в фоновом режиме. В какой-то момент мне нужно выпустить тост за то, что что-то завершено.

Я пытался и потерпел неудачу, потому что Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

Как я могу это сделать?

Ответы [ 6 ]

37 голосов
/ 15 мая 2010

onPostExecute - выполняется в потоке пользовательского интерфейса или же publishProgress(); в вашем doinbackground и

protected void onProgressUpdate(Integer... progress) {
}

http://developer.android.com/reference/android/os/AsyncTask.html

23 голосов
/ 07 апреля 2013

тосты внутри doInBackground

добавьте этот код, где вы хотите, чтобы появился тост

runOnUiThread(new Runnable() {
public void run() {

    Toast.makeText(<your class name>.this, "Cool Ha?", Toast.LENGTH_SHORT).show();
    }
});
19 голосов
/ 15 мая 2010

Вы также можете использовать метод runOnUiThread для управления вашим пользовательским интерфейсом из фоновых потоков.

9 голосов
/ 09 декабря 2011

Если вы хотите использовать тост Вы должны использовать этот метод: onProgressUpdate ()

protected Integer doInBackground(Void...Params) {
   int check_point = 1;
   publishProgress(check_point);
   return check_point;
}

protected void onProgressUpdate(Integer integers) {
  if(integers == 1) {
    Toast.makeText(classname.this, "Text", 0).show(); 
}
1 голос
/ 05 февраля 2016

Если вы хотите отобразить тост в doInBackground, вы можете использовать его в методе OnPostExecute AsyncTask.

protected void onPostExecute(String file_url) {    
   Toast.makeText(getApplicationContext(),"Your Message", Toast.LENGTH_LONG).show();

   pDialog.dismiss();//dismiss the progress dialouge
}
1 голос
/ 15 мая 2010

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

Редактировать: Я забираю это обратно. Я думаю, что вы можете реализовать onProgressUpdate, который выполняется в потоке пользовательского интерфейса, чтобы показать Toast и сделать вызовы для публикацииProgress из doInBackground.

...