Consumindo WebService(Axis) com Android

Para consumir um WebService utilizaremos o ksoap, efetue o download no seguinte link: aqui, não se esqueça de adicionar o jar ao Build Path.

Primeiramente é necessário adicionar a permissão de acesso a Internet no AndroidManifest.xml, adicione a seguinte configuração entre as tags

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

Para consumir o serviço escreva o seguinte código:

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class ConsomeServico extends Activity {
  private static final String SOAP_ACTION = "seuMetodo";
  private static final String METHOD_NAME = "seuMetodo";
  private static final String NAMESPACE = "http://endereco-do-webservice:8080/";
  private static final String URL = "http://endereco-do-webservice:8080/webservice/webservice.jws";

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView textView = new TextView(this);

    try {
      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
      envelope.setOutputSoapObject(request);
      HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
      androidHttpTransport.call(SOAP_ACTION, envelope);

      Object result = envelope.getResponse();

      textView.setText("Resultado: " + result);

    } catch (Exception e) {
        e.printStackTrace();
    }

    setContentView(textView);
  }
}

Dúvidas ou sugestões? Deixe o seu comentário =)

11 comentários sobre “Consumindo WebService(Axis) com Android

  1. cara eu nun intendi 100% o codigo…
    e tbm… como faço pra pega esse xml e armazenar em um banco de dados..

    me responde por e-mail… fika mais facill…

  2. Parabéns pelo Post, bem útil e prático.
    Mas ainda não consegui conectar… dá um erro:
    java.net.ConnectException: localhost/127.0.0.1:8080 – Connection refused
    Se puder me ajudar a descobrir o erro, segue o código:

    public class TesteWS extends Activity {
    private final String METHOD_NAME = "soma";
    private final String SOAP_ACTION = "soma";
    private final String NAMESPACE = "http://127.0.0.1:8080/";
    private final String URL = "http://127.0.0.1:8080/axis/Soma.jws";

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ((Button) findViewById(R.id.somar)).setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
    myClickHandler();
    }
    });
    }

    public void myClickHandler() {
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    HttpTransportSE httpTransport = new HttpTransportSE(URL);
    httpTransport.debug = true;

    PropertyInfo pi = new PropertyInfo();
    pi.setName("a");
    pi.setValue(Integer.parseInt(((EditText) findViewById(R.id.primeiro)).getText().toString()));
    pi.setType(int.class);
    request.addProperty(pi);

    pi = new PropertyInfo();
    pi.setName("b");
    pi.setValue(Integer.parseInt(((EditText) findViewById(R.id.segundo)).getText().toString()));
    pi.setType(int.class);
    request.addProperty(pi);

    try {
    envelope.setOutputSoapObject(request);
    httpTransport.call(SOAP_ACTION, envelope);
    Object response = envelope.getResponse();
    ((TextView) findViewById(R.id.resultado)).setText(response.toString());
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }

    Valeu!!!

    1. Nos atributos “NAMESPACE” e “URL” você deve informar o endereço do servidor onde está rodando o web service.

      O endereço que você definiu “http://127.0.0.1:8080” é o endereço de loopback, ou seja, com esse endereço o programa acaba tentando acessar um web service no próprio aparelho (ou emulador).

  3. Cara, vc já consumiu um webservice microsiga no android? estou tentando consumir na hora de receber os objetos me apare esse erro:

    09-14 12:54:21.496: INFO/teste(711): SoapFault – faultcode: ‘Sender’ faultstring: ‘WEBSERVICE ERROR : Soap Prefix Missing : CRDLOGIN : SESSIONLOGIN : Formato do Pacote Soap DESCONHECIDO.’ faultactor: ‘null’ detail: null

    abaixo: é o webservice microsiga:

    private static final String NAMESPACE = “http://webservices.microsiga.com.br/”;

    private static final String URL = “http://webservices.microsiga.com.br/CRDLOGIN.apw”;
    private static final String METHOD_NAME = “SESSIONLOGIN”;
    private static final String SOAP_ACTION = “http://webservices.microsiga.com.br/SESSIONLOGIN”;

    ele está nor se quiser fazer testes!!

    1. Ronaldo, bom dia.

      Estou com o mesmo problema seu. Tento consumir um WS da microsiga e recebo o mesmo erro.

      Voce conseguiu resolver este problema?

  4. Como faço pra usar esse mesmo código mas considerando que o metodo do web service possui argumentos (parâmetros). Se possível, responda por email. Obrigado.

  5. Para adicionar parâmetros em um método via cliente webservice vc precisa usar a função addProperty(“NomeParametro”,”Valor”) onde o nome do parâmetro é exatamente igual ao que foi implementado no Servidor.

  6. E quando eu recebo uma lista com vários campos e quero filtrar o XML para pegar apenas um dado especifico, vc tem alguma ideia de como faz? valeuu

  7. Ola Caro amigo joaopetreli
    se ainda tiver disposicao para me ajudar estou usando o exemplo acima seu porem quando execute o projeto esta dando erro THe application Webservice1 process br.we.com.br) has stopped please try again
    estou a dias tentando procurar na net algo que eu possa consumir um web service segue minha
    private static final String SOAP_ACTION = “Webusuario”;
    private static final String METHOD_NAME = “Websuario”;
    private static final String NAMESPACE = “http://10.0.2.2:8087/”;
    private static final String URL = “http://10.0.2.2:8087/webrun/webservices/ANDServices.jws?wsdl”;

    o resto esta como no seu site

    Obrigado se puder me ajudar

Deixe um comentário