インターセプターを使用することはできますが、使用する必要があります。
あなたが必要とするのは少しアーキテクチャです。
まず、必要なヘッダーを提供するヘルパーを作成します。
public class AnalyticsHeader {
private String analyticsHeaderName;
private String analyticsHeaderValue;
public void setHeaderValue(String header) {
this.analyticsHeaderValue = header;
}
public void setHeaderName(String header) {
this.analyticsHeaderName = header;
}
public String getHeaderName() {
return analyticsHeaderName;
}
public String getHeaderValue() {
return analyticsHeaderValue;
}
}
だけ渡すインターセプターの作成時に、今すぐ(依存性の注入を使用し、さらに良いか)私たちのアプリケーションMainActivity例えば、あなたのアプリケーション内部にアクセス可能な場所に
をこのクラスのインスタンスをキープインターセプターへのAnalyticsHeaderのインスタンス:
public static final class AnalyticsInterceptor implements Interceptor {
private final AnalyticsHeader header;
public AnalyticsInterceptor(AnalyticsHeader header) {
this.header = header;
}
@Override
public Response intercept(Chain chain) throws IOException {
final Request original = chain.request();
Response response;
if (header.getHeader() != null) {
Request request = original.newBuilder()
.header(header.getHeaderName(), header.getHeaderValue())
.method(original.method(), original.body())
.build();
response = chain.proceed(request);
} else {
response = chain.proceed(original);
}
return response;
}
}
そして...
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.addInterceptor(new AnalyticsInterceptor(CentralPlaceInApp.getAnalyticsHeader());
...
retrofit = new Retrofit.Builder()
.baseUrl(config.getRestUrl())
.client(builder.build())
.build();
今すぐ、あなたのアプリケーションランタイム中にいつでもヘッダの値を変更することができますCentralPlaceInApp.getAnalyticsHeader().setHeaderValue(CurrentActivity.class.getSimpleName());