Senhores bom dia,
Estou começando agora com o Android e procurei muito antes de postar aqui, peço ajuda.
Cenário:
Estou testando um aplicativo pelo Virtual Device (dentro do Eclipse), onde, tenho uma aplicação que consome um webService(Local), consultando um banco de dados local, não saindo para a internet. Assim funciona.
Quando executei o aplicativo direto pelo Celular(via USB), me deparei com um timeout quando tento consumir o webService (o mesmo serviço consumido antes).
Dúvida:
Eu sei que dentro do Android, eu não passo LocalHost e sim o IP local do VirtualDevice+webservice, exemplo: “10.0.2.2/webservice.asmx” (funciona quando testo executando pelo Virtual Device dentro do Eclipse).
O que pode estar dando errado quando executo o mesmo código pelo celular via USB?
Era para ter funcionado assim ou eu tenho que setar um IP fixo para o computador e passar este IP Fixo + WebService, exemplo: “10.10.10.1/webservice.asmx” ??
Pessoal, desde já agradeço um abraço!
Só uma observação:
A mensagem de erro que aparece é um Connection Timeout.
Não precisa de IP Fixo, eu uso sem e funciona, só me preocupo de setar o ip que está no momento. Devia funcionar, poderia mandar o log completo ?
Bom dia Valério,
Posso mas não estou com ele aqui no momento, mas assim que chegar em casa o colocarei aqui.
Estou utilizando o Ksoap para trabalhar com o webservice.
Esse IP, 10.0.2.2 foi utilizado no URL. Foi a única forma que consegui fazer o aplicativo funcionar localmente.
Um exemplo de utilização deste IP seria como abaixo:
String SOAP_ACTION = "http://master.system.com.br/";
String NAMESPACE = "http://system.com.br/";
String METHOD_NAME = "GetPrice";
String URL = "http://10.0.2.2/MasterWS/GetPrice?WSDL";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
Quando você testa sua aplicação consultando um webservice local pelo Virtual Device(Emulator) no eclipse, você não utiliza o IP 10.0.2.2?
Ou quando você executa pelo celular(Debugando pela USB), você não utiliza este IP do Emulator?
Tanto pelo emulador, tanto pelo celular eu rodo com o ip da minha máquina, seu webservice foi feito em que ? C# ? Java ? Com JSON ?
O WebService é feito em C# e consigo consumir sem problemas pois passo o ?WSDL (consigo consumir no Emulator).
Agora, uma coisa que não fiz foi definir um IP Fixo para minha máquina e testar por ele.
Talvés o aplicativo ao rodar pelo celular não esteja conseguindo encontrar este IP 10.0.2.2 certo?
provavelmente é isso sim, veja qual o ip da sua maquina e coloque.
Outra Dúvida,
Se o webService estiver rodando localmente no computador, e este computador estiver em um rotiador com IP Fixo definido, eu para acessar via wi-fi(do celular), teria de colocar o IP do rotiador no código certo?
Você coloca o ip que está no servidor.
Ok, Coloco o IP do computador pois o aplicativo não está em um servidor, está local.
Mas se eu tentar acessar via wi-fi, como funcionaria?
Teria de setar o IP da máquina ou o do Rotiador no código?
Obs. Rotiando o Computador para possibilitar o acesso ao webservice
IP da máquina que está seu WebService, pelo menos comigo funciona assim. E olha que já testei com roteador e como o meu celular android fazendo papel de roteador também rs.
Interessante, agradeço seu apoio brother, estou tendo um norte agora.
Assim que chegar em casa vou realizar este teste e posto aqui no forum o resultado.
Espero ajudar quem está ou irá passar por esta situação hehe
Até então muito obrigado!
Boa tarde,
Testei e não deu certo.
A aplicação funciona quando a emulo no virtual device, quando a executo direto no celular dá um erro de TimeOut. Estou utilizando o Ksoap2 para me conectar com um WebService.
Erro:
java.net.SocketTimeoutException: Connection timed out
Disparado quando tenta processar a seguinte linha:
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,5000);
esse 5000 é um tempo que coloquei para ver se passava mas não passou.
O que pode ser??
Você mudou o ip da maquina ? no emulador que ip tava ? o ip da maquina ?
Boa tarde Valeio,
Então, eu troquei o Ip.
coloquei o tempo maior e mudou a mensagem de erro:
java.net.ConnectException: 145.100.200.154/145.100.200.154:80 - Network is unreachable
O código é o seguinte:
private static final String METHOD_NAME = “busca”;
private static final String NAMESPACE = “http://tempuri.org/wsTeste/”;
private static final String SOAP_ACTION = “http://tempuri.org/wsTeste/busca”;
private static final String URL = "http://145.100.200.154/wsTeste/ws.asmx"; //Ip da máquina
String result = "";
public String Convert(String chapa) {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("chapa", "001522");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
try {
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,5000);
androidHttpTransport.call(SOAP_ACTION, envelope);
if(envelope.getResponse()!=null){
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
result = "NOME: " + response.toString();
}
return result.toString();
} catch (Exception e) {
return e.getMessage();
}
}
Só uma informação:
O mesmo código é executado no Emulador (isto que acho estranho pois funciona no emulador.
Estou com o cabo conectado direto no celular/Computador.
Eu não estou via Wi-fi.
Neste caso, o celular consegue encontrar a rede? pois a mensagem é que ele não conseguiu encontrar, certo?
Cabo ? USB ? Oxe, não funciona não eu acho, tente conectar via wi-fi, o proprio aparelho do android consegue ser o roteador …
Estou com o cabo saindo do Celular conectando direto no Computador (Eclipse aberto em modo Debug).
Neste computador, existe um webService local. A rede é cabeada, não há um access point.
Amigão, me tire uma dúvida por favor.
Se ativar o Wi-fi do celular, no cenário descrito acima, eu consigo me conectar? tentei e não consegui.
Eu primeiramente precisaria estar autenticado nesta rede por wi-fi para conseguir o acesso ou não?
Assim, pelo menos lá em casa dá certo.
Meu aparelho, ele funciona como roteador de Wi-Fi, e lá em casa eu uso o notebook e me conecto com ele normalmente, uso internet e etc.
Então eu pego o ip da maquina, configuro na minha aplicação e pronto.
O meu celular tem também esta fução de rotear com duas opções: ancoragem USB e Ponto de acesso Wi-Fi.
Pelo que estou entendendo, você utilizou seu note para ser o Access Point e se conectou por wi-fi com o celular, então é por isto que passa.
No notebook, você chegou a criar uma rede local ou você joga seu notebook para um switch para este difundir o sinal?