Android 添加和删除拦截器

Android 添加和删除拦截器,android,retrofit,okhttp,Android,Retrofit,Okhttp,我有一个场景,我在标题中添加了一个拦截器,其中包含一个授权字符串,以从API中获取令牌。当我得到一个令牌时,我希望添加一个新的拦截器,该拦截器将把收到的令牌添加到所有后续请求的头中 既然不再需要包含授权令牌的前一个拦截器,如何删除它 private void removeAuthorizationInterceptor() { for (Interceptor interceptor : App.getOkHttpClient().newBuilder().networkIntercep

我有一个场景,我在标题中添加了一个拦截器,其中包含一个
授权
字符串
,以从API中获取
令牌
。当我得到一个令牌时,我希望添加一个新的拦截器,该拦截器将把收到的令牌添加到所有后续请求的头中

既然不再需要包含
授权
令牌的前一个拦截器,如何删除它

private void removeAuthorizationInterceptor()
{
    for (Interceptor interceptor : App.getOkHttpClient().newBuilder().networkInterceptors())
    {
        // Find the interceptor which has the Authorization token and remove it
    }
}

您只需要创建一个新的OkHttpClient.Builder,然后修改列表。我认为与您的代码不同的是,您需要使用刚刚为下一个请求构建的新客户端

OkHttpClient client = ...;

OkHttpClient.Builder b = client.newBuilder();
b.networkInterceptors().removeIf(MyInterceptor.class::isInstance);
client2 = b.build();

这是Java 8代码,但您可以更改Java 7的removeIf,例如,迭代并将除拦截器之外的所有内容添加到新列表中。

我在我的上下文中面临相同的问题,我有三个不同的api,只有一个需要使用拦截器(AddHeaderAndOkie),该拦截器添加此api所需的api签名和cookie,其他API不需要此功能,我如何实现此功能