Ho recentemente convertito le mie attività in frammenti.Frammenti sostituiti durante l'esecuzione di AsyncTask - NullPointerException su getActivity()
Utilizzando qualcosa di simile a Tab-Navigation i frammenti vengono sostituiti quando l'utente seleziona un'altra scheda. Dopo aver popolato il frammento, avvio almeno un AsyncTask per ottenere alcune informazioni da Internet. Tuttavia - se l'utente passa a un'altra scheda come viene eseguito il doBackground-method dalla mia AsyncTask - il frammento è sostituito e quindi sto ottenendo un NullPointerException
nelle linee marcate:
@Override
protected Object doInBackground(Object... params) {
...
String tempjson = helper.SendPost(getResources().getText(R.string.apiid)); //ERROR: Fragment not attached
...
}
protected onPostExecute(Object result) {
...
getActivity().getContentResolver() //NULLPOINTEREXCEPTION
getView().findViewById(R.id.button) //NULL
...
}
getActivity()
e getResources()
causa un errore perché il mio frammento è stato sostituito.
Le cose che ho provato:
- Calling annullare metodo sul mio AsyncTask (non risolverà primo errore né il secondo errore se il frammento viene sostituita mentre
onPostExecute()
viene eseguito) - controllando se
getActivity()
ènull
o chiamandothis.isDetached()
(non una vera e propria correzione e che avevo bisogno di controllare ogni volta che io chiamogetActivity()
e così via)
Quindi la mia domanda è: quale sarebbe il migliore per sbarazzarsi di questi problemi AsyncTask? Non ho avuto questi problemi utilizzando Attività in quanto non sono stati "uccisi"/distaccati sul cambiamento di tabulazione (il che ha comportato un maggiore utilizzo della memoria - il motivo per cui mi piace passare a Fragments)
si dovrebbe usare isDetached() solo se hai rimosso il frammento in modo esplicito. Altrimenti, dovresti usare isAdded() per gestire i casi in cui il sistema ha distrutto il collegamento tra la tua attività e il tuo frammento. – pcans
@Nikolay Elenkov in che modo il ciclo di vita può evitare di controllare ogni volta prima di chiamare getactivity? – Bear