这是代码
public class InitializeBuilderOkhttp extends OkHttpClient{
OkHttpClient client;
public OkHttpClient InitializeBuilderOkhttp() {
client = new OkHttpClient();
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(30, TimeUnit.MINUTES);
builder.readTimeout(30, TimeUnit.MINUTES);
builder.writeTimeout(30, TimeUnit.MINUTES);
client = builder.build();
return client;
}
}
如您所见,我已经给出了30分钟的连接超时,读取超时和写入超时。
我正在初始化并声明上述类
OkHttpClient client = new InitializeBuilderOkhttp();
在活动的oncreate方法中。
在异步任务类的doInBackground方法中,我使用上面的okhttp客户端调用rest api。
@Override
protected String doInBackground(String... params) {
RequestBody formBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("userId", userId)
.addFormDataPart("password", password)
.addFormDataPart("datatype", "app")
.build();
Request request = new Request.Builder()
.url(params[0])
.post(formBody)
.build();
Response response = null;
try {
response = client.newCall(request).execute();
return response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
这段代码有什么问题? 谢谢你的时间。
注意: - 超时为10000毫秒或10秒,这是okhttp的默认超时时间.10秒后,logcat上显示错误。即超时没有改变,它仍然是默认值。< / p>
答案 0 :(得分:1)
OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(60, TimeUnit.SECONDS)
.build();
以这种方式建立客户端并使用秒单位而不是分钟。它会工作。希望它会帮助你。让我知道它是否有效:))