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.

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

He resuelto esto siguiendo la solución alternativa

  1. 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

  2. Crear un objeto de ArrayList decir currentTasks

     ArrayList<String> currentTasks = new ArrayList<String>(); 
  3. 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); } 
  4. 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

  • Comprobar la existencia de un fragmento usando Robotium - Android
  • No se puede resolver el método getContext () en android.support.v4.app.Fragment (versión 21.0.3) Android Studio
  • Utilizar FragmentTransaction con un DialogFragment
  • Después de la rotación, la transacción de fragmentos da IllegalStateException
  • Cómo utilizar PreferenceFragment?
  • Guardar parte de Actividad / Fragmento como imagen
  • Fija la posición del botón en la actividad de los padres cuando el teclado está abierto
  • Arrastrar y soltar entre dos fragmentos
  • Android FragmentTabHost
  • Cómo Estilo un FragmentTabHost dentro de un fragmento
  • Obtener referencia al fragmento anidado de FragmentTabHost
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.