In una delle mie attività sto usando AsyncTask
. In doInBackground()
sto effettuando chiamate a vari metodi. In uno di questi metodi sto ricevendo un'eccezione, quindi nel blocco catch voglio mostrare l'errore nel Toast. So che posso usare Log
, ma preferisco ancora Toast. Quindi, come posso utilizzare Toast in AsyncTask in doInBackground()?Come mostrare il toast in AsyncTask in doInBackground
risposta
Si potrebbe avvolgere il toast in runOnUIThread()
ma questa non è la soluzione migliore.
È necessario impostare un flag booleano nel blocco catch quando si verifica un errore, quindi visualizzare un Toast appropriato in onProgressUpdate()
, onPostExecute()
o uno qualsiasi degli altri metodi con accesso all'interfaccia utente ogniqualvolta il flag è true
.
Non capisco che ... + l'ho fatto +1 – Ahmad
@Ahmad Ho restituito il favore, visto che dopotutto abbiamo ragione. – Sam
Quale contesto deve essere passato per brindare ** getBaseContext() ** o ** getApplication() ** Contesto? – hrishikesh
È possibile visualizzarlo in un metodo, che ha accesso al thread UI come onPreExecute()
, onProgressUpdate()
e onPostExecute()
ritorno da doInBackground come
protected String doInBackground(String... params){
//some code
try{
//some code
}catch(Exception e){
return "Exception Caught";
}
return someValidResult;
}
protected void onPostExecute(String result){
if(result.equalsIgnoreCase("Exception Caught")){
//Display Toast
}else{
// // whatever you wana do with valid result
}
}
scrivere il seguente codice in cui si deve mostrare brindisi in doInBackground()
metodo
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show();
}
});
- BTW: se si utilizza
Fragments
, è necessario chiamarerunOnUiThread(...)
attraverso la vostra attività: metodo
getActivity().runOnUiThread(...)
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show();
}
});
sta lavorando benissimo per mostrare brindisi in doInBackground()
Creare un oggetto gestore ed esegui tutti i tuoi messaggi Toast usando quello.
@Override
protected Void doInBackground(Void... params) {
Handler handler=new handler();
handler= new Handler(context.getMainLooper());
handler.post(new Runnable(){
public void run(){
Toast.makeText(context, "Created a server socket",Toast.LENGTH_LONG).show();
}
});
}
activity.runOnUiThread(new Runnable() {
public void run()
{
Toast.makeText(activity, "Toast teaxt", Toast.LENGTH_SHORT).show();
}
});
provare questo codice
void showError(final String err) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(downloadprogress.this, err + "error in download", Toast.LENGTH_LONG)
.show();
}
});
}
perché non si è risintonizzare errore OnPostExecute da doInBackground() e poi così questo errore in un brindisi da OnPostExecute –
non è possibile modificare l'interfaccia utente da il metodo doInBackground(), prova a restituire alcuni risultati e verifica su quel risultato nel metodo onPostExecute(), se lo è, quindi mostra il Toast – Houcine
@Sam: easy man !! non ho votato, ho appena aggiunto il mio commento, so che puoi dare l'accesso in 'doInBackground()', ma non è raccomandato farlo, se è così, allora perché ci sono metodi 'suProgressUpdate () 'e' onPostExecute() '?? – Houcine