CODEX

¿Consumir un Web Service NuSOAP en Android?

Primero debemos agregar el permiso:

<uses-permission android:name="android.permission.INTERNET" />

Para nuestro caso vamos ha llamar a la clase ClientesWS, la cual va a ejecutar la función saludar (de nuestro Web Service) con un parámetro (nombre) y recibirá una respuesta:

import java.io.IOException;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
 
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
 
public class ClienteWS extends AsyncTask<String, Integer, String> {
 
    private Context context;
     
    private static final String SOAP_ACTION = "SaludoXMLwsdl#Saludar";
    private static final String OPERATION_NAME = "Saludar";
    private static final String WSDL_TARGET_NAMESPACE = "SaludoXMLwsdl";
    public static final String SOAP_ADDRESS = "http://midominio.com/path/to/servicio.php";
 
    public ClienteWS(Context context) {
        this.context = context;
    }
 
    @Override
    protected String doInBackground(String... params) {
 
        String result = null;
 
        SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
                OPERATION_NAME);
 
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER10);
 
        // Con esta opción indicamos que el web service no es .net
        envelope.dotNet = false;
 
        envelope.setOutputSoapObject(request);
 
        HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
         
        // Enviando un parámetro al web service
        request.addProperty("nombre", params[0]);
 
        try {
             
            // Enviando la petición al web service
            httpTransport.call(SOAP_ACTION, envelope);
 
            // Recibiendo una respuesta del web service
            SoapPrimitive resultsRequestSOAP = (SoapPrimitive) envelope
                    .getResponse();
 
            result = resultsRequestSOAP.toString();
 
            httpTransport.getServiceConnection().disconnect();
        } catch (IOException | XmlPullParserException e) {
            Log.v("Error", e.getMessage());
            result = e.getMessage();
        }
 
        return result;
    }
 
    @Override
    protected void onPostExecute(String result) {
        // Mostramos la respuesta del web service
        Toast.makeText(context, result, Toast.LENGTH_LONG).show();
    }
 
}

Luego para probar este cliente solamente tenemos que ejecutar el siguiente código en nuestra Activity:

new ClienteWS(this).execute("ProgramaciónExtrema.com");

Espero que sea de ayuda. Ante cualquier problema no duden en dejar un comentario.