2010-11-22 11 views
1

Ich versuche, Rest Web-Dienste in Andoid aufrufen, aber ich habe immer eine Auszeit Ausnahme. Der Code ist:Auszeit Ausnahme beim Aufruf Rest Webservice in Android

HttpClient httpclient = new DefaultHttpClient(); 

HttpGet request = new HttpGet("http://XXXX:8080/YYY/zzzz?username=0001epd&password=1111"); 

ResponseHandler<String> handler = new BasicResponseHandler(); 
try { 
     String result = httpclient.execute(request, handler); 
} catch (ClientProtocolException e) { 
      e.printStackTrace(); 
} catch (IOException e) { 
      e.printStackTrace(); 
      } 
httpclient.getConnectionManager().shutdown(); 

Haben Sie eine Ahnung, wo der Fehler?

Im Manifest fügte ich android.permission.INTERNET

Antwort

1

Wenn Sie dies auf Emulator ausführen, haben Sie versucht, die obige URL auf Emulator-Browser setzen und sehen, ob Sie das Ergebnis erhalten. Wenn Sie das Ergebnis in Browser nicht sehen können und Sie sind dann hinter Proxy versuchen Sie die folgenden Zeilen in Ihrem Code hinzufügen

HttpParams my_httpParams = new BasicHttpParams(); 

final String proxyHost = android.net.Proxy.getDefaultHost(); 

final int proxyPort = android.net.Proxy.getDefaultPort(); 

if(proxyPort != -1) 
{ 
    my_httpParams.setParameter(ConnRoutePNames.DEFAULT_PROXY, new HttpHost(proxyHost, proxyPort));    
} 

Führen Sie die HttpParams in DefaultHttpClient

+0

Diese Lösung funktioniert gut mit den SIM-Daten. Danke für die Unterstützung – user422688

+0

Ich bin in der Lage, von Emulator zu verbinden, aber wenn versuchen von Gerät bekomme ich Ausnahme - ConnectTimeoutException: Connect zu/10.0.0.172: 80 Timeout. –

1

Ihre Internetverbindung auf Ihrem mobilen Gerät oder Arbeitsstation Vielleicht oder der Remote-Service dauert einige Zeit zu langsam ist. Sie können es in Ihrem Internetbrowser testen, um die REST-URL anzufordern.

Mindestens können Sie versuchen, die Timeouts in Ihrem Code zu erhöhen:

final int timeout = 10000; //ms 
HttpConnectionParams.setConnectionTimeout(httpParams, timeout); 
HttpConnectionParams.setSoTimeout(httpParams, timeout); 
final HttpClient httpclient = new DefaultHttpClient(httpParams); 
1

Ich bezweifle es die Art von Timeout ist man nur durch upping der Grenze beheben als Impression schon sagt, das klingt eher wie ein Netzwerkproblem mit Ihrer Einrichtung, um den Server zu erreichen.

Ist das von einem Emulator oder einem echten Gerät? Stellen Sie sicher, dass Sie den Server tatsächlich erreichen können (z. B. sehen Sie, was XXXX:8080 im Browser eingeben); Wenn Sie auf dem Emulator versuchen, eine Verbindung zu Ihrem lokalen Computer herzustellen, müssen Sie 10.0.2.2 als IP-Adresse verwenden (nicht 127.0.0.1 oder Ihre IP im LAN). Wenn Sie sich auf einem physischen Gerät befinden, gelten die üblichen Client-Server-Netzwerküberprüfungsregeln:

  • Sind Sie im selben LAN/Subnetz wie Ihr Server, wenn es sich um einen lokalen Entwicklungsserver handelt?
  • Wenn Sie versuchen, die Verbindung extern über das Internet und nicht über Ihr LAN herzustellen, sind Sie sicher, dass die richtigen Firewall-Ports für die externe Anforderung von Ihrem Entwicklungsserver geöffnet sind?
  • Ist Ihre Serversoftware so eingerichtet, dass Verbindungen von externen Anforderungen akzeptiert werden? (Einige Entwicklungsserver, wie Django, sind so eingestellt, dass sie aus Sicherheitsgründen standardmäßig nur lokale Hostverbindungen akzeptieren).
  • +0

    Ja, es ist kein Problem der Timeout ist. Ich setze das Timeout mit dem anderen Wert und das Problem ist nicht gelöst. Ich arbeite mit einem echten Gerät und dem gleichen Webdienst, den ich über das iPhone nutzen kann. – user422688

    +0

    Darüber hinaus ist es kein Problem der Firewall, da die IP öffentlich sind und ich eine Daten-SIM verwenden, um zu verbinden. Darüber hinaus kann ich es aus dem Browser auf Android-Handy verbrauchen. – user422688

    +0

    Können Sie die Traceback für Ihre Ausnahme von Logcat buchen? –

    Verwandte Themen