Come sollevare un brindisi in AsyncTask, mi viene richiesto di utilizzare il Looper
-
26-09-2019 - |
Domanda
Ho compiti completata da AsyncTask in background. Ad un certo punto ho bisogno di emettere un toast che qualcosa è stato completato.
ho provato e ho fallito perché
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Come posso fare questo?
Soluzione
OnPostExecute - eseguito sul thread UI
o
publishProgress()
; nel vostro doinbackground e
protected void onProgressUpdate(Integer... progress) {
}
http://developer.android.com/reference/android/os/ AsyncTask.html
Altri suggerimenti
si può brindare all'interno doInBackground
aggiungere questo codice in cui si desidera Toast comparire
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(<your class name>.this, "Cool Ha?", Toast.LENGTH_SHORT).show();
}
});
È inoltre possibile utilizzare runOnUiThread metodo per manipolare l'interfaccia utente dal thread in background.
Se si desidera utilizzare Toast Si consiglia di utilizzare questo metodo: 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();
}
Se si desidera visualizzare il Toast dal thread in background che si dovrà chiamare runOnUiThread da doInBackground. Non credo che c'è un altro modo.
Modifica: prendo quella posteriore. Penso che si possa implementare onProgressUpdate, che viene eseguito sul thread dell'interfaccia utente, per mostrare le chiamate Toast e make Per publishProgress da doInBackground.
Se si desidera visualizzare il toast in doInBackground, è possibile utilizzarlo nel metodo OnPostExecute di AsyncTask.
protected void onPostExecute(String file_url) {
Toast.makeText(getApplicationContext(),"Your Message", Toast.LENGTH_LONG).show();
pDialog.dismiss();//dismiss the progress dialouge
}