我有一個應用程序依賴於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