我有一个应用程序依赖于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)
什么是标准超时异常?连接超时?连接超时?读取超时?请堆栈跟踪。 – EJP
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