2016-06-07 94 views
2

我有一个场景,我添加一个拦截器,其中包含一个AuthorizationString在标题中从API获取token。当我取回一个令牌时,我希望添加一个新的拦截器,它将接收到的令牌添加到所有后续请求的头部。添加和删除拦截器

如何删除之前包含Authorization令牌的拦截器,因为它不再需要?

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

回答

3

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

OkHttpClient client = ...; 

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

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