10秒后Okhttp超时异常,即使我已超时30分钟。

时间:2017-03-20 08:13:03

标签: java android forms android-asynctask okhttp3

这是代码

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>

1 个答案:

答案 0 :(得分:1)

OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
                    .connectTimeout(60, TimeUnit.SECONDS)
                    .readTimeout(60, TimeUnit.SECONDS)
                    .writeTimeout(60, TimeUnit.SECONDS)
                    .build();

以这种方式建立客户端并使用秒单位而不是分钟。它会工作。希望它会帮助你。让我知道它是否有效:))