2010-12-03 3 views
5

Ich bin in ein ärgerliches Problem mit HTC Legend (Android 2.2). Dieses Problem nicht auf Xperia, Galaxy, Nexus, etc.Android: 3G zu WIFI Schalter während in der Mitte auf der App = Verlust der Netzwerkkonnektivität

Wenn ich meine App auf einer 3G-Verbindung starten, einige Daten abrufen, dann in Telefoneinstellungen gehen und WIFI aktivieren, erhält das Telefon automatisch eine WIFI-Verbindung, die bevorzugt wird über 3G. Das Problem ist, sobald ich zurück zur App wechsle, scheint es, alle Netzwerkverbindung verloren zu haben und keine Verbindung zu irgendetwas herzustellen. Andere Apps, wie zum Beispiel der Webbrowser, haben jedoch keine Probleme mit der neuen Wifi-Verbindung. Ping funktioniert gut aus der Shell des Telefons.

Wenn ich lange genug warte (z. B. 15 Minuten), scheint sich der Netzwerkstapel automatisch zu reparieren und meine App kann wieder Netzwerkverbindungen herstellen. Natürlich ist diese Verzögerung inakzeptabel.

Gibt es eine Möglichkeit, den Netzwerkstapel programmgesteuert neu zu initialisieren? Ich erstelle jedes Mal eine neue java.net.HttpURLConnection, aber es kommt immer noch zu einem Timeout, sobald das WIFI erworben wurde.

Dank

Code:

byte[] response = null; 
    HttpURLConnection connection = null; 
    int responseCode = -1; 

    // check the cache first 
    String readyResponse = ResponseCache.getInstance().get(getUrl()); 
    if (readyResponse != null) { 
     Log.d(LOG_TAG, "Returning CACHED server response for " + getUrl()); 
     return readyResponse.getBytes(); 
    } 

    try { 

     URL url = new URL(getUrl()); 
     Log.i(LOG_TAG, "Sending Request: " + url.toExternalForm()); 

     connection = (HttpURLConnection) url.openConnection(); 
     connection.setUseCaches(false); 
     connection.setDoOutput(true); 
     connection.setDoInput(true); 
     connection.setConnectTimeout(ApplicationConfiguration.HTTP_CONNECT_TIMEOUT); 
     connection.setReadTimeout(ApplicationConfiguration.HTTP_READ_TIMEOUT); 

     if (BuildType.getHTTPMethod() == BuildType.METHOD_GET) 
     { 
      connection.setRequestMethod("GET"); 
     } 
     else 
     { 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

      String body = getParameters(); 
      connection.setRequestProperty("Content-Length", Integer.toString(body.length())); 

      OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream()); 
      wr.write(getParameters()); 
      wr.flush(); 
     } 



     connection.connect(); 

     responseCode = connection.getResponseCode(); 

Und stacktrace

E/xxx.yyy.zzz( 927): java.net.SocketTimeoutException: Read timed out 
E/xxx.yyy.zzz( 927): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativeread(Native Method) 
E/xxx.yyy.zzz( 927): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.access$200(OpenSSLSocketImpl.java:55) 
E/xxx.yyy.zzz( 927): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:532) 
E/xxx.yyy.zzz( 927): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.readln(HttpURLConnectionImpl.java:1279) 
E/xxx.yyy.zzz( 927): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.readServerResponse(HttpURLConnectionImpl.java:1351) 
E/xxx.yyy.zzz( 927): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.sendRequest(HttpURLConnectionImpl.java:1339) 
E/xxx.yyy.zzz( 927): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.doRequestInternal(HttpURLConnectionImpl.java:1656) 
E/xxx.yyy.zzz( 927): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.doRequest(HttpURLConnectionImpl.java:1649) 
E/xxx.yyy.zzz( 927): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:1374) 
E/xxx.yyy.zzz( 927): at org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:117) 
E/xxx.yyy.zzz( 927): at xxx.yyy.zzz.executeRequest(zzz.java:95) 

Antwort

1

Ich sehe Sie ein SocketTimeoutException haben, vielleicht können Sie diese Ausnahme abfangen und schließen Sie einen neuen Sockel mit?

+0

ja, meine Lösung war ähnlich, zusätzlich legte i setConnectTimeout() und setReadTimeout() auf sehr niedrige Werte und halten nur hämmern an der URL, bis ein gültiger Socket erhalten wird. – Saideira

Verwandte Themen