Sou verde ainda na programação, mas a pouco tempo comecei a desenvolver para Android e consegui fazer uma aplicação que envia um comando do celular para um webservice, tudo jóia!. Mas analisando a classe “DefaultHttpClient”, pelos exemplos que venho pesquisando (como http://blog.dahanne.net/2009/08/16/how-to-access-http-resources-from-android/) é passado por parametro apenas o endereço do webservice na url.
Gostaria de sabe como passar junto outra string, que seria o comando em si para o webservice analisar, e como no webservice obter o parametro e executar na máquina. Alguma idéia? Estou pesquisando ainda, se descobrir já posto e mato essa charada.
Abaixo segue o código da aplicação android e do webservice:
[code]
//aplicacao android - url seria = http://192.168.100.2:9090/projetoExecutaComando - por exemplo
public InputStream getWebData(String url){
DefaultHttpClient httpClient = new DefaultHttpClient();
URI uri;
InputStream data = null;
try {
uri = new URI(url);
HttpGet method = new HttpGet(uri);
HttpResponse response = httpClient.execute(method);
data = response.getEntity().getContent();
} catch (Exception e) {
e.printStackTrace();
}
return data;
}[/code]
[code]
//codigo do webservice
@WebServlet("/projetoExecutaComando")
public class ExecutaComando extends HttpServlet {
private static final long serialVersionUID = 1L;
Se eu pudesse te dar uma dica seria: Use um servlet que recebe um json no lugar de um webservice.
Tive experiência com os dois cenários, e é estúpido a simplicidade de se fazer algo com json em vez de webservice.
O protocolo HTTP possui 2 lugares para se passar informações para o destino:
GET - passa os dados na própria URL
POST - passa os dados dentro da requisição HTTP (existe uma serie de vantagens em usar POST, consulte um manual de HTTP!)
Usamos o GET para passar dados pequenos e estaticos
Usamos o POST para para dados da aplicação, informações de processos.
No seu caso tudo indica para vc passar via POST.
Jonny, já ouvi falar do json, mas terei que estudar esse ainda.
Então no momento vou tentar resolver de forma mais rápida como falou o fernando, via doPost. Suspeitei desde o princípio… :roll:[/quote]
Sim…dentro do post vc pode passar qualquer coisa…
Unica coisa q eu indico é para vc usar o padrão REST mesmo ao invés de fazer esse seu REST proprietário kkk…
T+
do doGet, ele executa ok. Mas novamente se eu tentar chamar com parametros o doPost não vai. Por quê?
Por que vc não esta chamando via POST!!! Posta ai seu codigo que ta chamando…
Muda um pouquinho sim…mas vc ja ta no caminho certo…REST apenas adota um padrão de comunicação usando semantica HTTP
A aplicação Android que chama o webservice está como no post oiriginal, com diferença agora apenas que fiz referencia da classe principal para ser chamada por outra forma, via o arquivo web.xml
public InputStream getWebData(String url){
DefaultHttpClient httpClient = new DefaultHttpClient();
URI uri;
InputStream data = null;
try {
uri = new URI(url);
HttpGet method = new HttpGet(uri);
HttpResponse response = httpClient.execute(method);
data = response.getEntity().getContent();
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
Tenho tentado chamar o webservice pelo metodo getwebdata de duas formas:
Assim achava que se estivesse passando junto a chamada com o parametro comando, estaria chamando via doPost. Se não passei nada seria doGet, mas os testes deram como falei antes.
E se existir o método service(), o webservice chama ele mesmo que eu nao passe o parametro, anulando o doGet. A apostila da Caelum é muito boa, mas não detalha isso.
Poderia me dar exemplo prático neste contexto?
OMG, :shock: estava aí o tempo todo e não me toquei! Eu sabia que podia definir o "method " em um formulário, como na tag mas não tinha me ligado como fazer a chamada assim, sem ser por uma página!
[quote=kdashu]OMG, :shock: estava aí o tempo todo e não me toquei! Eu sabia que podia definir o "method " em um formulário, como na tag mas não tinha me ligado como fazer a chamada assim, sem ser por uma página!
Valeu Fernando![/quote]
Sim…via código é a mesma coisa…veja na documentação pq eu naõ sei de cabeça…cada API de HTTP é diferente uma da outra…