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?
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
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();
}
});
Vous pouvez également utiliser la méthode runOnUiThread pour manipuler votre interface utilisateur à partir des threads d'arrière-plan.
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();
}
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.
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
}