Comment porter un toast à AsyncTask, je suis invité à utiliser le Looper
-
26-09-2019 - |
Question
Je les tâches terminées par AsyncTask en arrière-plan. À un certain moment, je dois donner un toast que quelque chose est terminé.
Je l'ai essayé et a échoué parce que je
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Comment puis-je faire?
La solution
onPostExecute - exécute sur l'interface utilisateur fil
ou
publishProgress()
; dans votre doinbackground et
protected void onProgressUpdate(Integer... progress) {
}
http://developer.android.com/reference/android/os/ AsyncTask.html
Autres conseils
vous pouvez Toast intérieur doInBackground
ajouter ce code où vous voulez Toast apparaître
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(<your class name>.this, "Cool Ha?", Toast.LENGTH_SHORT).show();
}
});
Vous pouvez également utiliser runOnUiThread méthode pour manipuler votre interface utilisateur à partir de fils de fond.
Si vous voulez 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 voulez afficher le Toast du fil de fond que vous devrez appeler runOnUiThread de doInBackground. Je ne crois pas qu'il y ait une autre façon.
Edit: je prends ce retour. Je pense que vous pouvez mettre en œuvre onProgressUpdate, qui fonctionne sur le thread d'interface utilisateur pour afficher les appels Toast et apporter à publishProgress de doInBackground.
Si vous voulez afficher le Toast dans doInBackground, vous pouvez l'utiliser dans la méthode OnPostExecute de AsyncTask.
protected void onPostExecute(String file_url) {
Toast.makeText(getApplicationContext(),"Your Message", Toast.LENGTH_LONG).show();
pDialog.dismiss();//dismiss the progress dialouge
}