2010-12-03 8 views
5

मैं एचटीसी लीजेंड (एंड्रॉइड 2.2) के साथ एक परेशानी की समस्या में भाग रहा हूं। एक्सपीरिया, गैलेक्सी, नेक्सस इत्यादि पर इस मुद्दे को नहीं देख रहा हैएंड्रॉइड: ऐप पर मध्य में वाईफ़ाई स्विच के लिए 3 जी = नेटवर्क कनेक्टिविटी का नुकसान

जब मैं 3 जी कनेक्शन पर अपना ऐप लॉन्च करता हूं, तो कुछ डेटा प्राप्त करता हूं, फिर फोन सेटिंग्स में जाता है और वाईफ़ाई सक्षम करता है, फोन स्वचालित रूप से एक वाईफ़ाई कनेक्शन प्राप्त करता है जिसे अनुकूल किया जाता है 3 जी से अधिक समस्या यह है कि, जब मैं ऐप पर वापस आ जाता हूं, तो ऐसा लगता है कि यह सभी नेटवर्क कनेक्टिविटी खो गया है और कुछ भी कनेक्ट करने में असमर्थ है। हालांकि, उदाहरण के लिए वेब ब्राउज़र जैसे अन्य ऐप्स को नए वाईफाई कनेक्शन का उपयोग करने में कोई समस्या नहीं है। पिंग फोन के खोल से ठीक काम करता है।

यदि मैं काफी देर तक प्रतीक्षा करता हूं, (उदाहरण के लिए 15 मिनट), नेटवर्क स्टैक स्वचालित रूप से खुद को सुधारने लगता है और मेरा ऐप एक बार फिर से नेटवर्क कनेक्शन बनाने में सक्षम है। बेशक, यह देरी अस्वीकार्य है।

क्या नेटवर्क स्टैक को प्रोग्रामेटिक रूप से दोबारा जोड़ने का कोई तरीका है? मैं एक नया java.net बनाता हूं। प्रत्येक बार HttpURL कनेक्शन, फिर भी वाईफ़ाई प्राप्त होने के बाद भी यह समय समाप्त हो जाता है।

धन्यवाद

कोड:

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(); 

और स्टैकट्रेस

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) 

उत्तर

1

मैं देख रहा हूँ कि तुम एक SocketTimeoutException है, शायद आप इस अपवाद को पकड़ने और एक नया सॉकेट का उपयोग कर कनेक्ट कर सकते हैं?

+0

हाँ, मेरे समाधान अपने सुझाव के समान था, साथ ही, मैं setConnectTimeout() और setReadTimeout() डाल करने के लिए बहुत कम मूल्यों और बस की पिटाई रखने यूआरएल पर एक वैध सॉकेट प्राप्त होने तक। – Saideira

0

bug that causes the system to reuse old http connections है। प्रणाली संपत्ति http.keepAlive गलत पर सेट करना समस्या का समाधान करना चाहिए:

System.setProperty("http.keepAlive", "false"); 
+0

प्री-फ्रोयो के लिए केवल सच है –

संबंधित मुद्दे