Recientemente convertí mis actividades en fragmentos.Fragmentos que se reemplazan mientras se ejecuta AsyncTask - NullPointerException en getActivity()
Utilizando algo similar a Tab-Navigation, los fragmentos se reemplazan cuando el usuario selecciona otra pestaña. Después de llenar el fragmento, comienzo al menos una AsyncTask para obtener información de Internet. Sin embargo - si el usuario cambia a otra ficha al igual que se está ejecutando el doBackground método de mi AsyncTask - el fragmento se reemplazado y por lo tanto estoy consiguiendo un NullPointerException
en las líneas marcadas:
@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()
y getResources()
causa un error porque mi Fragmento es reemplazado.
cosas que he intentado:
- Calling cancelar método en mi AsyncTask (no solucionará primer error ni el segundo error si se sustituye el fragmento mientras se ejecuta
onPostExecute()
) - comprobar si
getActivity()
esnull
o llamandothis.isDetached()
(no una solución real y que había necesidad de comprobar que cada vez que llamogetActivity()
y así sucesivamente)
Entonces mi pregunta es: ¿cuál sería el mejor para deshacerse de estos problemas AsyncTask? No tuve estos problemas al usar Actividades ya que no fueron "eliminados"/separados en el cambio de pestaña (lo que resultó en un mayor uso de memoria - la razón por la que me gusta cambiar a Fragmentos)
que puedes usar isDetached() solo si se desprendió explícitamente el fragmento usted mismo. De lo contrario, debe usar isAdded() para manejar los casos en que el sistema destruyó el vínculo entre su actividad y su fragmento. – pcans
@Nikolay Elenkov ¿cómo el ciclo de vida puede evitar la comprobación cada vez antes de llamar a getactivity? – Bear