Android:如何覆盖特定API的改造超时

发布于 2025-02-08 22:53:20 字数 1277 浏览 1 评论 0原文

我有以下代码可以为项目中的所有API留出时间:

final OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .connectTimeout(30, TimeUnit.SECONDS)
    .writeTimeout(30, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .build();

对于一个API,我想更改测试目的的时间,然后我实现了一个拦截器,并添加如下:

class CustomTimeOutInterceptor(private val context: Context) : Interceptor {
    

    override fun intercept(chain: Interceptor.Chain): Response {

        val request = chain.request()
        val requestID = request.header("Reuest_Id")

if(requestID?.equals(RequestID.USER_TYPE) == true) {
            val timeout = ConfigManager.getInstance(context)
            chain.withReadTimeout(10, TimeUnit.MILLISECONDS)
                    .withWriteTimeout(10, TimeUnit.MILLISECONDS)
                    .withConnectTimeout(10, TimeUnit.MILLISECONDS)
        }
return chain.proceed(request)
}
}

此后,我将interceptor添加了这样的interceptor :

final OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .connectTimeout(30, TimeUnit.SECONDS)
    .writeTimeout(30, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .addInterceptor(CustomTimeOutInterceptor(context))
    .build();

但这没有时间。我尝试删除客户端超时,但仍然无法使用。有任何解决方案吗???

I have the following code to set time out for all apis in my project :

final OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .connectTimeout(30, TimeUnit.SECONDS)
    .writeTimeout(30, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .build();

For one of the api I want to change the time out for testing purpose, and I implemented one interceptor and added as below :

class CustomTimeOutInterceptor(private val context: Context) : Interceptor {
    

    override fun intercept(chain: Interceptor.Chain): Response {

        val request = chain.request()
        val requestID = request.header("Reuest_Id")

if(requestID?.equals(RequestID.USER_TYPE) == true) {
            val timeout = ConfigManager.getInstance(context)
            chain.withReadTimeout(10, TimeUnit.MILLISECONDS)
                    .withWriteTimeout(10, TimeUnit.MILLISECONDS)
                    .withConnectTimeout(10, TimeUnit.MILLISECONDS)
        }
return chain.proceed(request)
}
}

After this I am adding interceptor like this :

final OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .connectTimeout(30, TimeUnit.SECONDS)
    .writeTimeout(30, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .addInterceptor(CustomTimeOutInterceptor(context))
    .build();

but it is not getting time out. I tried removing client timeouts and still it did not work. Any solution ???

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绝不服输 2025-02-15 22:53:20

如下

final OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .addInterceptor(CustomTimeOutInterceptor())  // <-- this is required
    .connectTimeout(30, TimeUnit.SECONDS)
    .writeTimeout(30, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .build();

Add CustomTimeOutInterceptor Interceptor in your OkHttpClient object like below

final OkHttpClient okHttpClient = new OkHttpClient.Builder()
    .addInterceptor(CustomTimeOutInterceptor())  // <-- this is required
    .connectTimeout(30, TimeUnit.SECONDS)
    .writeTimeout(30, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .build();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文