Android Fragment: qué método de ciclo de vida utilizar para la llamada de servicio web
Estoy desarrollando una aplicación en la que están involucrados varios fragmentos. En cada fragmento tengo que llamar al servicio web para buscar datos.
Actualmente estoy llamando al servicio web del método onCreateView () de Fragment. Problema que estoy recibiendo que cada vez que la llamada de servicio web está en curso y si la orientación del dispositivo se cambia, entonces nueva llamada de servicio web comienza a invocar.
- Android | Detener TabLayout recargar / actualizar mis fragmentos
- Comprensión onTrimMemory (nivel int)
- Comunicación entre fragmentos / cuadros de diálogo en android
- Forzar cierre cuando los cambios de orientación con fecha abierta DialogueFragment
- En android cómo configurar la imagen de encabezado de cajón de navegación y el nombre de forma programática en el archivo de clase?
Creo que esto podría ser porque onCreateView () método se llama en el cambio de configuración.
Como puedo resolver esto. Y qué método de ciclo de vida debo utilizar para llamar al servicio web para que sea llamado sólo una vez
- Comprender android: duración y android: startDelay
- Android Fatal Error - No se puede realizar esta acción después de onSaveInstanceState
- Cómo utilizar diferentes onKeyDown en fragmento de una misma actividad
- ¿Cómo encuentro el tamaño de la pantalla en una clase de fragmentos?
- Android Studio obtener "Debe implementar OnFragmentInteractionListener"
- Fragmento de Android que no guarda el estado
- Viewpager y FragmentPagerAdapter: Eliminación de la vista de página
- ¿Cómo leer un DB de SQLite en android con un cursorloader?
He resuelto esto siguiendo la solución alternativa
-
Cree un identificador de operación para cada método de llamada de servicio web. Por ejemplo, "Autenticación" para la llamada de inicio de sesión
-
Crear un objeto de ArrayList decir currentTasks
ArrayList<String> currentTasks = new ArrayList<String>();
-
En cada método en el que llamo servicio web, compruebe si el identificador de operación del método correspondiente ya está presente en ArrayList. Si no, entonces inicie la operación.
String operationId = "Authentication"; if(currentTasks.indexOf(operationId) == -1) { <do web service call operation here> currentTasks.add(operationId); }
-
Método en el que está recibiendo la respuesta de la operación anterior, elimine el identificador de operación de ArrayList
if(currentTasks.indexOf("Authentication") != -1){ currentTasks.remove("Authentication"); }
Esto asegurará que la llamada no vaya al método web que está actualmente en curso.
Sé que esta no es la mejor manera de lograrlo y esto no podría la mejor práctica a seguir, pero por ahora esto funciona para mí.
Si su código de servicio web se está reiniciando debido a un cambio en la orientación del dispositivo, probablemente utilice un AsyncTask
. Este es un problema común con AsyncTasks y tiene varias maneras de resolverlo.
Una solución común consiste en ajustar su AsyncTask alrededor de un Fragment
invisible y asegurarse de que este fragmento no se destruye y se vuelve a crear de nuevo durante un cambio de orientación. Echa un vistazo a este tutorial sobre cómo hacerlo: retención de objetos a través de cambios de configuración
Una solución simple sería utilizar una variable estática que apunte a asynctask. Cree y llame a AsyncTask si la variable no es null.
Saludos, Prateek
- Tiempo de viaje entre dos ubicaciones en Google Map Android API V2
- Actualizado NDK a r9c de r8e y obtuvo el error "Ninguna regla para hacer objetivo"