HttpURLConnection 在某些设备上超时——非常神秘的行为
HttpURLConnection times out on certain devices -- very mysterious behavior
我有一个依赖于发出 POST/GET 请求的应用程序。我的应用程序正在通过同一 wifi 网络上的各种设备进行测试。
在某些设备上,我得到了 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 威瑞森版 5.0.1
三星 Galaxy S5 威瑞森版 6.0.1
三星 Galaxy S7 AT&T 6.0.1
三星 Galaxy S7 Verizon 6.0.1
三星 Galaxy S7 Edge Verizon 6.0.1
BLU R1 HD N/A6.0.1
Galaxy Tab S2
LG G4 威瑞森 6.0.1
- LG G2 威瑞森 5.1.1
- Google 像素 At&t 7.1.1
- 索尼 Xperia Z Ultra Verizon 5.1.1
以下是导致超时问题的设备列表:
LG Tribute HD 无计划 6.0.1
LG V10 威瑞森 6.0.1
LG 3 区 5.1.1
三星 Note 4 ATT&T 6.0.1
我尝试通过延长超时持续时间和执行 System.setProperty("http.keepAlive", "false") 来解决超时问题。 None 这些措施有所帮助。
考虑到超时发生在同一个 Wifi 网络上,我相当确定问题是由供应商特定的膨胀软件或其他一些 device/vendor/operator 特定问题引起的。
任何人都可以就可能导致此问题的原因分享他们的想法吗?
java.net.SocketTimeoutException
W/System.err: 在 java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
W/System.错误:在 java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
W/System.错误:在 java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
好的,所以通过 Play 商店发布应用程序似乎解决了(至少)其中一种设备(最近更新到 6.0.2 的 Note 4)的问题。
因此,有些设备在直接安装 APK 时似乎会超时,但在通过 Play 商店安装时可以正常工作。
我有一个依赖于发出 POST/GET 请求的应用程序。我的应用程序正在通过同一 wifi 网络上的各种设备进行测试。
在某些设备上,我得到了 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 威瑞森版 5.0.1
三星 Galaxy S5 威瑞森版 6.0.1
三星 Galaxy S7 AT&T 6.0.1
三星 Galaxy S7 Verizon 6.0.1
三星 Galaxy S7 Edge Verizon 6.0.1
BLU R1 HD N/A6.0.1
Galaxy Tab S2
LG G4 威瑞森 6.0.1
- LG G2 威瑞森 5.1.1
- Google 像素 At&t 7.1.1
- 索尼 Xperia Z Ultra Verizon 5.1.1
以下是导致超时问题的设备列表:
LG Tribute HD 无计划 6.0.1
LG V10 威瑞森 6.0.1
LG 3 区 5.1.1
三星 Note 4 ATT&T 6.0.1
我尝试通过延长超时持续时间和执行 System.setProperty("http.keepAlive", "false") 来解决超时问题。 None 这些措施有所帮助。
考虑到超时发生在同一个 Wifi 网络上,我相当确定问题是由供应商特定的膨胀软件或其他一些 device/vendor/operator 特定问题引起的。
任何人都可以就可能导致此问题的原因分享他们的想法吗?
java.net.SocketTimeoutException
W/System.err: 在 java.net.PlainSocketImpl.read(PlainSocketImpl.java:488) W/System.错误:在 java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37) W/System.错误:在 java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
好的,所以通过 Play 商店发布应用程序似乎解决了(至少)其中一种设备(最近更新到 6.0.2 的 Note 4)的问题。
因此,有些设备在直接安装 APK 时似乎会超时,但在通过 Play 商店安装时可以正常工作。