código TareaWSConsulta en Android

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 5

Este código define una clase TareaWSConsulta en Android que se extiende de

AsyncTask. Su objetivo es conectar con un servicio web SOAP para obtener una lista de
clientes, procesarla y actualizar una interfaz gráfica. A continuación, se explica paso a
paso y línea por línea.

1. Definición de la clase
java
Copiar código
private class TareaWSConsulta extends AsyncTask<String, Integer,
Boolean> {

• TareaWSConsulta: Clase interna privada que hereda de AsyncTask. Esto


permite ejecutar tareas en un hilo secundario para no bloquear la interfaz de
usuario.
• AsyncTask<String, Integer, Boolean>:
o String: Tipo de los parámetros de entrada.
o Integer: Tipo para publicar progreso durante la ejecución (no se utiliza
en este caso).
o Boolean: Tipo del resultado devuelto por el hilo secundario.

2. Variable listaClientes
java
Copiar código
private Cliente[] listaClientes;

• Arreglo de objetos Cliente para almacenar los datos que se obtendrán del
servicio web. Cada cliente tendrá las propiedades id, nombre y telefono.

3. Método doInBackground
java
Copiar código
protected Boolean doInBackground(String... params) {

• Método ejecutado en el hilo secundario. Aquí se realiza la conexión al servicio


web.
• String... params: Representa los parámetros de entrada (no se usan en este
caso).

a) Definición de variables SOAP


java
Copiar código
final String NAMESPACE = "http://sgoliver.net/";
final String URL = "http://10.0.2.2:1473/ServicioClientes.asmx";
final String METHOD_NAME = "ListadoClientes";
final String SOAP_ACTION = "http://sgoliver.net/ListadoClientes";

• NAMESPACE: Espacio de nombres definido en el servicio web.


• URL: Dirección del servicio web SOAP.
o Ejemplo: "http://10.0.2.2:1473/ServicioClientes.asmx" se usa
para pruebas locales en el emulador de Android.
• METHOD_NAME: Nombre del método SOAP que se va a invocar
(ListadoClientes).
• SOAP_ACTION: Acción SOAP que corresponde al método.

b) Creación de la solicitud SOAP

java
Copiar código
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

• SoapObject: Representa una solicitud SOAP.


• Se crea un objeto request asociado al método ListadoClientes dentro del
espacio de nombres definido por NAMESPACE.

c) Configuración del envoltorio SOAP

java
Copiar código
SoapSerializationEnvelope envelope = new
SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);

• SoapSerializationEnvelope:
o Se crea un "sobre" SOAP compatible con la versión 1.1
(SoapEnvelope.VER11).
o dotNet = true: Indica que el servicio web es de tecnología .NET.
o setOutputSoapObject(request): Asigna la solicitud request al sobre
SOAP.

d) Transporte HTTP para la solicitud

java
Copiar código
HttpTransportSE transporte = new HttpTransportSE(URL);
• HttpTransportSE: Clase que envía la solicitud SOAP al servidor mediante el
protocolo HTTP.
• Recibe como parámetro la URL del servicio.

e) Envío de la solicitud y recepción de la respuesta

java
Copiar código
try {
transporte.call(SOAP_ACTION, envelope);
SoapObject resSoap = (SoapObject) envelope.getResponse();

• transporte.call(...):
o Envía la solicitud al servidor.
o SOAP_ACTION: Especifica la acción SOAP.
o envelope: Contiene la solicitud y luego recibirá la respuesta.
• envelope.getResponse():
o Recupera la respuesta del servicio web, que se espera sea un objeto
SoapObject.

f) Procesamiento de la respuesta

java
Copiar código
listaClientes = new Cliente[resSoap.getPropertyCount()];
for (int i = 0; i < listaClientes.length; i++) {
SoapObject ic = (SoapObject) resSoap.getProperty(i);
Cliente cli = new Cliente();
cli.id = Integer.parseInt(ic.getProperty(0).toString());
cli.nombre = ic.getProperty(1).toString();
cli.telefono = Integer.parseInt(ic.getProperty(2).toString());
listaClientes[i] = cli;
}

• resSoap.getPropertyCount():
o Obtiene el número de clientes devueltos por el servicio.
o Crea un arreglo listaClientes con esa cantidad de elementos.
• Iteración:
o Recorre cada cliente en la respuesta.
o Cada cliente (ic) es convertido en un objeto SoapObject.
o Se asignan los valores a un objeto Cliente:
▪ getProperty(0): ID del cliente.
▪ getProperty(1): Nombre del cliente.
▪ getProperty(2): Teléfono del cliente.
o El objeto Cliente se guarda en el arreglo listaClientes.

g) Manejo de excepciones
java
Copiar código
} catch (Exception e) {
resul = false;
}

• Si ocurre un error durante la conexión o el procesamiento de la respuesta, se


captura la excepción y se retorna false.

4. Método onPostExecute
java
Copiar código
protected void onPostExecute(Boolean result) {

• Este método se ejecuta en el hilo principal después de completar


doInBackground.
• Boolean result: Indica si la operación fue exitosa (true) o falló (false).

a) Actualización de la interfaz gráfica en caso de éxito

java
Copiar código
if (result) {
final String[] datos = new String[listaClientes.length];
for (int i = 0; i < listaClientes.length; i++)
datos[i] = listaClientes[i].nombre;

ArrayAdapter<String> adaptador = new ArrayAdapter<>(


MainActivity.this,
android.R.layout.simple_list_item_1,
datos
);

lstClientes.setAdapter(adaptador);
}

• datos:
o Se crea un arreglo de cadenas para almacenar los nombres de los
clientes.
o Se llena con los nombres del arreglo listaClientes.
• ArrayAdapter:
o Conecta los datos al componente visual (un ListView).
o simple_list_item_1: Diseño simple para cada elemento de la lista.
• lstClientes.setAdapter(adaptador):
o Asocia el adaptador al ListView para mostrar los datos.

b) Actualización en caso de error


java
Copiar código
else {
txtResultado.setText("Error!");
}

• Si la operación falla, muestra el texto "Error!" en un componente TextView.

Resumen del flujo

1. doInBackground:
o Se conecta al servicio SOAP.
o Obtiene y procesa la lista de clientes.
2. onPostExecute:
o Si el proceso fue exitoso, actualiza el ListView con los nombres de los
clientes.
o Si falló, muestra un mensaje de error en pantalla.

También podría gustarte