2017-03-06 37 views
-1

我有一個應用程序依賴於POST/GET請求。我的應用正在通過同一個WiFi網絡上的各種設備進行測試。HttpURLConnection在某些設備上超時 - 非常神祕的行爲

在某些設備上,我得到了HttpURLConnection的標準超時異常。

下面就是發生超時:

HttpURLConnection conn = (HttpURLConnection) ((new URL(
        getString(R.string.base_url) + "/getnumbers").openConnection())); 
      conn.setDoOutput(true); 
      conn.setConnectTimeout(MainActivity.CONNECT_TIMEOUT_MS); 
      conn.setReadTimeout(MainActivity.READ_TIMEOUT_MS); 
      conn.setRequestProperty("Cookie", prefs.getString("sessionid", "")); 
      conn.setRequestProperty("Content-Type", "application/json"); 
      conn.setRequestProperty("Accept", "application/json"); 

      conn.setRequestMethod("POST"); 

      conn.connect(); 


      JSONObject progress = new JSONObject(); 
      try { 
       progress.put("username", prefs.getString("username", "")); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      // posting it 
      Writer wr = new OutputStreamWriter(conn.getOutputStream()); 
      wr.write(progress.toString()); 
      wr.flush(); 
      wr.close(); 

      is = conn.getResponseCode() >= 400 ? conn.getErrorStream() : 
        conn.getInputStream(); 

這個應用程序正常工作與下列設備:

  • 三星Galaxy S4的Verizon 5.0.1

  • 三星Galaxy S5 Verizon 6.0.1

  • 三星Galaxy S7 AT &Ť6.0.1

  • 三星Galaxy S7的Verizon 6.0.1

  • 三星Galaxy S7邊緣的Verizon 6.0.1

  • BLU R1 HD N/A 6.0.1

  • 的Galaxy Tab S2

  • LG G4 Verizon的6.0.1

  • LG G2的Verizon 5.1.1
  • 谷歌像素在&牛逼7.1.1
  • 索尼XPERIAž超Verizon的5.1.1

下面是導致超時問題的設備列表:

  • LG致敬HD沒有計劃6.0.1

  • LG V10商Verizon 6.0.1

  • LG區3 5.1.1

  • 三星注4 ATT &牛逼6.0.1

我試圖通過延長超時時間固定超時問題並通過做System.setProperty(「http.keepAlive」,「false」)。這些措施都沒有幫助。

考慮到超時發生在同一個Wifi網絡上,我相當確定問題是由供應商特定的英國媒體報道或某些其他設備/供應商/運營商特定問題引起的。

任何人都可以分享他們的想法的想法,以什麼可能造成這種情況?

java.net.SocketTimeoutException 

W/System.err:在java.net。PlainSocketImpl.read(PlainSocketImpl.java:488) W/System.err:在java.net.PlainSocketImpl.access $ 000(PlainSocketImpl.java:37) W/System.err:在java.net.PlainSocketImpl $ PlainSocketInputStream.read (PlainSocketImpl.java:237)

+0

什麼是標準超時異常?連接超時?連接超時?讀取超時?請堆棧跟蹤。 – EJP

+0

java.net.SocketTimeoutException W/System.err:在java.net.PlainSocketImpl.read(PlainSocketImpl.java:488) W/System.err:在java.net.PlainSocketImpl.access $ 000(PlainSocketImpl.java:37 ) W/System.err:在java.net.PlainSocketImpl $ PlainSocketInputStream.read(PlainSocketImpl.java:237) – 372

回答

-1

好吧,所以通過Play Store發佈應用程序似乎可以解決(至少)其中一個設備(最近更新到6.0.2的Note 4)的問題。

因此,有些設備在APK直接安裝時似乎超時,但通過Play商店安裝後可以工作。