Aplicação Android(Celular) + Eclipse + WebService (Local no computador)

23 respostas
K

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!

23 Respostas

K

Só uma observação:

A mensagem de erro que aparece é um Connection Timeout.

V

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 ?

K

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?

V

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 ?

K

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?

V

provavelmente é isso sim, veja qual o ip da sua maquina e coloque.

K

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?

V

Você coloca o ip que está no servidor.

K

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

V

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.

K

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!

K

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??

V

Você mudou o ip da maquina ? no emulador que ip tava ? o ip da maquina ?

K

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 = <a href="http://tempuri.org/wsTeste/">http://tempuri.org/wsTeste/</a>”;

private static final String SOAP_ACTION = <a href="http://tempuri.org/wsTeste/busca">http://tempuri.org/wsTeste/busca</a>”;
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(); 
    } 
}
K

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?

V

Cabo ? USB ? Oxe, não funciona não eu acho, tente conectar via wi-fi, o proprio aparelho do android consegue ser o roteador …

K

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?

V

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.

K

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?

V

Não fiz nada, apenas conectei e vi o ip e funcionou, mas aqui na empresa tem wi-fi e funcionou também. O pior que essa parte de redes eu não entendo :stuck_out_tongue: Mas simplificando, se você tem o servidor e o celular na mesma rede, vai funcionar.

K

Ahh entendi, não esquenta brother, tá ajudando muito!

Eu vou montar este cenário e postar aqui o mais rápido possível.

F

manda ai tou curioso pra saber…

K

Boa tarde Pessoal,

Retornando. Deu certo!

Eu deixo aí um agradecimento especial ao Valeio que me ajudou muito.

Montei o seguinte cenário:

Infra:
Computador com Ip Fixo setado em sua placa de rede + WebService executando localmente + Access Point para propagar uma rede criada.

Android:
No aplicativo, eu tirei aquele IP do Emulator (10.0.2.2) e adicionei o definido na placa de rede do computador.

Então, funcionou.

É cláro que você terá de se conectar à sua rede criada para que isto execute.
Neste momento, o celular não está com o cabo USB conectado ao computador, está apenas via Wi-Fi =)

Um abraço a todos, Deus abençoe!

Criado 9 de novembro de 2012
Ultima resposta 16 de nov. de 2012
Respostas 23
Participantes 3