gpt4 book ai didi

java - 拦截器没有被称为 retrofit2

转载 作者:行者123 更新时间:2023-11-29 04:37:18 25 4
gpt4 key购买 nike

尝试添加一个拦截器以向使用 okhttp3 和 retrofit2 的请求添加 header 。我注意到标题没有被添加到请求中,我的 system.out.println 调试行从未被调用过。不知道为什么,但这是我的代码:

创建服务:

OkHttpClient client = new OkHttpClient();

client.newBuilder()
.addInterceptor(new ServiceInterceptor(context))
.authenticator(new MyAuthenticator(context))
.build();

service = (new Retrofit.Builder()
.baseUrl(BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build())
.create(Service.class);

服务拦截器:

public class ServiceInterceptor implements Interceptor {

private final Context context;

public ServiceInterceptor(Context context){
this.context = context;
}

@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();

System.out.println("Interceptor");

if(request.header("No-Authentication") == null){
request = request.newBuilder()
.addHeader("User-Agent", "APP NAME")
.addHeader("Authorization", "bearer " + PreferenceManager.getDefaultSharedPreferences(context).getString("access_token", ""))
.build();
}

return chain.proceed(request);
}
}

不完全是问题的一部分,但我的身份 validator 也从未被调用...:

public class MyAuthenticator implements Authenticator {
private Context context;

public MyAuthenticator(Context context){
this.context = context;
}

@Override
public Request authenticate(Route route, Response response) throws IOException {
//blah blah refresh token here...

return null;
}
}

最佳答案

您将 client 设置为默认的 OkHttpClient。您使用 newBuilder() 从该客户端创建一个新客户端,但不要将其分配给任何东西。如果您不使用第一个客户端,那么您应该在第一次分配一个构建器——

OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new ServiceInterceptor(context))
.authenticator(new MyAuthenticator(context))
.build();

关于java - 拦截器没有被称为 retrofit2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40793201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com