[問題] okhttp 常常 SocketTimeoutException

看板AndroidDev作者 (Ted)時間6年前 (2018/03/05 16:16), 6年前編輯推噓2(208)
留言10則, 3人參與, 6年前最新討論串1/1
目前使用的工具是 Android Studio 3.0.1、Windows 10 okhttp 的版本則是最新版 'com.squareup.okhttp3:okhttp:3.10.0' 問題如下: 我在一個 class 內寫了一支專門 call api 的 function 只要有串接 api 的需求,就會 call 這個 function 程式碼如下: - (MyTool.class) public static JSONObject post(String url, HashMap<String, String> hashMap) { FormBody.Builder builder = new FormBody.Builder(); if (hashMap != null && hashMap.size() > 0) { for (String key : hashMap.keySet()) { builder.add(key, hashMap.get(key)); } } Request request = new Request.Builder() .url(url) .post(builder.build()) .build(); try { OkHttpClient client = new OkHttpClient.Builder() .writeTimeout(15, TimeUnit.SECONDS) .connectTimeout(15, TimeUnit.SECONDS) .readTimeout(15, TimeUnit.SECONDS) .build(); Response response = client.newCall(request).execute(); String result = response.body().string(); return new JSONObject(result); } catch (Exception e) { e.printStackTrace(); return new JSONObject(); } } - call api 的範例: final HashMap<String, String> hashMap = new HashMap<>(); hashMap.put("test", "test"); new Thread(new Runnable() { @Override public void run() { JSONObject object = MyTool.post("test url", hashMap); } }).start(); - 結果就是時常出現: java.net.SocketTimeoutException: failed to connect to (api url) (port 80) after 15000ms 雖然伺服器沒有很高級,但出現 Timeout 的頻率實在是太高了 搞得我很難測試… 測試的時候都是用公司的 wifi(中華電信) 不知道是不是我的 code 有哪裡有問題? 有可能會是網路問題嗎?應該不太可能刻意去擋 okhttp 的連線吧? -- By ALi Project グランギニョル                仏語で「操り人形」または「人形劇」を指す。       普通は19世紀末のパリに実在した劇場「グラン・ギニョル座」を指す。  この劇場では人形の代わりに人間が出演し,残酷でエロチックな恐怖劇を演じた。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.222.191.78 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1520237816.A.6A5.html

03/05 23:20, 6年前 , 1F
如果是wifi的話 公司網路有可能因為太多人使用所以timeout
03/05 23:20, 1F

03/05 23:20, 6年前 , 2F
,要準確的抓問題點的話 要試4g看看才知道是不是code的問
03/05 23:20, 2F

03/05 23:20, 6年前 , 3F
03/05 23:20, 3F

03/05 23:22, 6年前 , 4F
或者是你用其他的外部資料 例如yahoo網頁試試 也能抓看看
03/05 23:22, 4F

03/05 23:22, 6年前 , 5F
是不是server的問題
03/05 23:22, 5F

03/06 01:02, 6年前 , 6F
如果不是一定要等Server回來才會下一步 那就是把timeout設短
03/06 01:02, 6F

03/06 01:02, 6年前 , 7F
然後多試幾次
03/06 01:02, 7F

03/06 01:03, 6年前 , 8F
會觸發這麼久的timeout都是網路本身有問題 東西不知道丟去哪
03/06 01:03, 8F

03/06 01:03, 6年前 , 9F
了 你可能要跟server同步debug才能知道問題到底出在哪
03/06 01:03, 9F
用 4G 熱點測試似乎沒有問題…   ※ 編輯: gcobc12632 (61.222.191.78), 03/06/2018 17:51:13

03/06 21:38, 6年前 , 10F
用不同網路就沒問題的話九成以上是網路問題
03/06 21:38, 10F
文章代碼(AID): #1QdFpuQb (AndroidDev)
文章代碼(AID): #1QdFpuQb (AndroidDev)