2017-03-06 72 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商店安装后可以工作。