![](/img/trans.png)
[英]Retrofit2 interceptor converts special character to Question mark in Android
[英]Interceptor no getting called retrofit2
嘗試使用okhttp3和retrofit2添加攔截器以向請求添加標頭。 我注意到標題沒有添加到請求中,我的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);
ServiceInterceptor:
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);
}
}
不完全是問題的一部分,但我的身份驗證員從未被調用過......:
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.