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);
}
}