Você Sabia…?

Como pegar dados de um Web Service usando Ksoap2 library…

Anúncios

Durante o desenvolvimento mobile, onde sua aplicação precisa pegar dados de um server, você chega a um ponto em que é preciso acessar um web service para pegar os dados necessários.

Como fazer isso no Android?

Através da biblioteca ksoap2 -> http://code.google.com/p/ksoap2-android/

Essa biblioteca nos permite acessar o webservice, requisitar dados e recebe-los de uma maneira simples. Através do link acima, você pode baixar a API e adicionar em seu projeto.

1. Declare as String`s importantes para definir o caminho e métodos que serão usados para serem acessados pelos objetos ksoap2



private static final String METHOD_NAME = "getFoo";
private static final String NAMESPACE = "http://foo.com.br/webservice/services/FooWebService";
private static final String URL ="http://foo.com.br/webservice/services/FooWebService?wsdl";


A primeira linha é o método do web service que você vai chamar.

A segunda linha é o “nome” do caminho de onde o web service se encontra.

A terceira linha é o serviço. Um arquivo .xml WSDL. Se você é novo nessa área, de uma olhada aqui.

Depois de termos definido essas constantes, vamos agora usar o ksoap2.

2. Cria um objeto SoapObject e com os atributos NAMESPACE e METHOD_NAME


  SoapObject request =  new SoapObject(NAMESPACE, METHOD_NAME);

3. Cria um objeto Property Info para colocar o dado que será mandado para o webservice. PropertyInfo é uma propriedade de um SoapObject


PropertyInfo pi = new PropertyInfo();

4. Nome da variavel que sera passada


pi.setName(nome);

5. Valor da variavel que sera passada. Essa variavel sera enviada para o web service, e depois ele retornara o resultado


pi.setValue(parametro);

6. tipo da variavel. Pode ser qualquer Object.


pi.setType(tipo);

7. Adiciona essa propriedade no objeto request


request.addProperty(pi);

8. Cria um objecto SoapSerializationEnvelope que irá receber um objeto serializado do webservice e entregará de volta ao app


SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

9. Define o objeto de retorno
Nessa linha definimos o tipo de objeto que sera retornado. Mas essa linha não é obrigatória, pois o ksoap automaticamente retorna um objeto Object


envelope.addMapping(NAMESPACE, nomeObjetoRetorno,  Object.class);

10. Setta o request aqui. Pois o objeto envelope mandará esse objeto request e receberá um outro objeto.


envelope.setOutputSoapObject(request);

11. Cria o objeto que fará a conexão com o web service


AndroidHttpTransport transport = new AndroidHttpTransport(URL);

12. Objeto que receberá o resultado do envelope


KvmSerializable response = null;
try {
transport.call(NAMESPACE, envelope);  //Conecta e envia o objeto
response  = (KvmSerializable)envelope.bodyIn; //recebe o resultado do web service. Um array de Objetos
} catch (Exception e) {
e.printStackTrace();
}

13. Cria um array de SoapObjects[] para receber os objetos do KvmSerializable response
Como eu estou esperando vários objetos do meu web service, eu vou coloca-los num array de SoapObject[]


if(response!=null){
SoapObject[] pontos = new SoapObject[response.getPropertyCount()];

14. Pega de response, passa pro SoapObject[]
Aqui mesmo você pode passar de SoapObject para o objeto que você estava esperando. Pode ser um que você tenha criado, ou uma String ou Object.


for (int i = 0; i < response.getPropertyCount(); i++) {
pontos[i] = (SoapObject) response.getProperty(i);
           }
}
-14.235004 -51.925280
Anúncios

Anúncios