[Android] Peticiones SOAP encadenadas

xMarston

En una app que estoy desarrollando necesito optimizar código ya que ahora mismo cuando el usuario se loguea o una vez ya logueado quiere sincronizar datos con los existentes en el servidor no reutilizo el mismo código si no que lo tengo duplicado en 2 Activitys ya que en una incluyo el tema del logueo y todo el rollo y la otra es simplemente sincronización.

El tema es que querría crearme una clase que me permitiera el no tener que repetir código prácticamente igual y no enguarrar tanto las Activitys ya que uso AsyncTasks que se llaman a sí mismas una vez que han terminado con la petición SOAP (con un switch voy lanzado las peticiones adecuadas).

Mi problema es más de planteamiento, ¿cómo podría organizarlo todo en una misma clase Java y después llamar a los métodos adecuados según Activity?

Gracias.

bLero

Yo me crearía una clase SOAPTask que extienda de ASyncTask y que reciba como parámetro la acción a solicitar con los parámetros correspondientes, y a la cual llamarías desde las Activities.

La respuesta sería directamente el XML. Podrías también meter por el medio una clase que te mapee ese XML a su objeto correspondiente.

Querosvan

¿Lo de usar otra Activity es por algo en concreto? Para hacer llamadas en paralelo o encadenarlas una después de otra hay varias librerías y métodos. Yo ahora le estoy pegando una prueba a BoltsFramework. Mira a ver si te es útil y te quitas una activity, si esque esa activity no hace nada, y de todas maneras puedes anidar tareas con eso.

LLoid

Sin ver tu código, la manera más correcta que se me ocurre con AsyncTask es una AsyncTask para el login (LoginTask) que llame a la de sincronización (SyncTask) en el onPostExecute:


LoginTask extends AsyncTask<...>

@Override
protected boolean doInBackground(...){...}

@Override
protected void onPostExecute(boolean success)
if(success) {
SincronizarTask task = new SincronizarTask();
task.execute();
} else {
Toast.make...("Error al hacer login, no se puede sincronizar").show();
}

}

Todo esto lo rulas mostrando un ProgressDialog en el onPreExecute de LoginTask que ocultas en el onPostExecute de SyncTask. Si SyncTask termina correctamente ya puedes hacer el intent a la segunda activity.

PD: Bloquea la rotación de la pantalla en el login o te garantizo que tendrás horas de diversión

--

Releyendo tu post, no sé si quieres tener en una clase externa la AsyncTask, la verdad es que no me ha quedado muy claro qué planteamiento tienes. De todos modos para mí la forma correcta es una AsyncTask distinta que contenga cada "grupo de funcionalidad".

1 respuesta
xMarston

Gracias a todos, al final hice una clase con las funciones básicas y desde las activitys donde las necesito hago lo que #4 comenta, todas las funciones retornan true o false así que en el onPostExecute según el resultado hago una cosa u otra.