2012-12-26 2 views
11

Sto provando a impostare una variabile in un'attività al risultato del mio AsyncTask. Ho letto che non posso restituire una variabile e che dovrei impostare la variabile nella mia attività e quindi modificarla nel metodo onPostExecute.In attesa di ASyncTask per finire o variabile da impostare

Il mio problema è che dopo il termine AsyncTask ho bisogno di usare quella variabile. Sto avendo problemi con questo perché tutte le soluzioni che ho provato finora causano il blocco dell'interfaccia utente e quindi non rispondono.

Quello che ho provato finora:

while (!task.isCancelled()) { 
    // Wait... 
} 

E

while (variable == null) { 
    // Wait ... 
} 

è quello che sto facendo il modo migliore per passare una variabile dal AsyncTask alla mia attività? Se è così, come posso aspettare che l'attività finisca nell'attività senza bloccare l'interfaccia utente?

+10

Non dovresti "aspettare" per il 'AsyncTask'. Dovrebbe fare qualcosa quando è fatto, probabilmente in 'onPostExecute()'. – Eric

+1

Nel metodo 'onPostExecute()' sto cambiando la variabile nella mia attività al risultato. Quello che sto cercando di fare è aspettare che la variabile sia cambiata. – Dan

+0

Esattamente - non farlo. Lo stesso 'AsyncTask'' onPostExecute() 'dovrebbe avviare la serie di eventi che si desidera vengano eseguiti al termine dell'attività. Nessun altro codice dovrebbe fare affidamento su tale attività. – Eric

risposta

13

Basta inserire il codice che si desidera eseguire dopo che la variabile è stata modificata in una funzione e chiamare questa funzione da onPostExecute.

+1

Non è una codifica pulita! –

37

Se si dipende dal risultato di un AsyncTask, è possibile farlo.

Object result = asyncTask.execute().get(); 

Il tipo del risultato è il tipo restituito nel metodo doInBackground(). Ma poi il thread principale sarà in attesa fino al completamento dell'attività.

+0

Grazie! Questo è esattamente quello che stavo cercando. – PeteH

+4

Ma se lo fai bloccherai il thread principale. Questo non è raccomandabile. – adalPaRi

+0

adalPaRi, a meno che non si tratti di uno splash screen? –