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

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?