web-dev-qa-db-fra.com

Comment lever un toast dans AsyncTask, je suis invité à utiliser le Looper

J'ai des tâches accomplies par AsyncTask en arrière-plan. À un moment donné, je dois émettre un toast que quelque chose est terminé.

J'ai essayé et j'ai échoué parce que Caused by: Java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

Comment puis je faire ça?

27
Pentium10

onPostExecute - s'exécute sur le thread d'interface utilisateur ou publishProgress(); dans votre doinbackground et

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

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

37
Alex Volovoy

vous pouvez Toast à l'intérieur de doInBackground

ajoutez ce code à l'endroit où vous souhaitez faire griller

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

    Toast.makeText(<your class name>.this, "Cool Ha?", Toast.LENGTH_SHORT).show();
    }
});
23
Jack K Fouani

Vous pouvez également utiliser la méthode runOnUiThread pour manipuler votre interface utilisateur à partir des threads d'arrière-plan.

19

Si vous souhaitez utiliser Toast, vous devez utiliser cette méthode: 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(); 
}
9
Korean

Si vous souhaitez afficher le Toast à partir du thread d'arrière-plan, vous devrez appeler runOnUiThread à partir de doInBackground. Je ne pense pas qu'il y ait un autre moyen.

Edit: je reprends cela. Je pense que vous pouvez implémenter onProgressUpdate, qui s'exécute sur le thread d'interface utilisateur, pour afficher le Toast et effectuer des appels à publishProgress à partir de doInBackground.

1
Brandon O'Rourke

Si vous souhaitez afficher le Toast dans doInBackground, vous pouvez l'utiliser dans la méthode OnPostExecute d'AsyncTask.

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

   pDialog.dismiss();//dismiss the progress dialouge
}
1
Nilay