更新时间:2023-02-25 19:06:27
您必须考虑一些重要的事情:
You must consider some important things :
AsyncTask
一样从UI thread
执行Okhttp3
请求.不要在完成后忘记关闭响应正文.
Okhttp3
request away from UI thread
, like AsyncTask
.Don't forget to close response body after complete.
new AsyncTask<String,Void,String>(){
@Override
protected String doInBackground(String... strings) {
String strResponse = null;
try {
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
strResponse = response.body().string();
response.close(); // DON't forget to close body =@response.body().close();
}
}catch (Exception ex){
}
return strResponse;
}
@Override
protected void onPostExecute(String s) {
// Update UI here
}
};
使用enqueue
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
// When failure
mActivity.runOnUiThread(); // If need to update UI
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
String result = response.body().string();
mActivity.runOnUiThread(); // update UI under UI thread.
response.close(); // close response body.
}
}
});
创建OkHttp3Client
并配置超时.
Creating OkHttp3Client
and configure timeout.
private static OkHttpClient createHttpclient() {
final OkHttpClient.Builder builder = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS);
setSocketFactory(builder); // To handle SSL certificate.
return builder.build();
}