目前使用的工具是 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 的連線吧?