改造变更 RequestInterceptor
Retrofit change RequestInterceptor
我正在使用带有 RequestInterceptor 的 Retrofit。
问题是我发送的每个请求都有不同的 Header "Accept",所以我每次创建时都需要用 RequestInterceptor 更改 "Accept" header一个要求。
到目前为止我是这样做的:
private void updateApiMethodsFor(final String linkName) {
JacksonConverter jacksonConverter = new JacksonConverter();
RestAdapter restAdapter = new RestAdapter
.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(ROOT_URL)
.setConverter(jacksonConverter)
.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
ApiIndexLink1 apiIndexLink = getIndexLinkForName(linkName);
if (apiIndexLink != null) {
request.addHeader("Accept", apiIndexLink.getContentTypes().getContentTypeList().get(1));
}
}
})
.build();
apiMethods = restAdapter.create(BCApiMethods.class);
}
问题是,如果我每次都在发出请求之前调用它,它太昂贵了。有没有更好的方法来解决这个问题?
RequestInterceptor myRequestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
ApiIndexLink1 apiIndexLink = getIndexLinkForName(linkName);
if (apiIndexLink != null) {
request.addHeader("Accept", apiIndexLink.getContentTypes().getContentTypeList().get(1));
}
}
};
private void updateApiMethodsFor(final String linkName) {
JacksonConverter jacksonConverter = new JacksonConverter();
RestAdapter restAdapter = new RestAdapter
.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(ROOT_URL)
.setConverter(jacksonConverter)
.setRequestInterceptor(myRequestInterceptor)
.build();
apiMethods = restAdapter.create(BCApiMethods.class);
}
在这里,瓶颈是每次都创建一个新的拦截器。您可以通过使用拦截器变量
来克服这个问题
我正在使用带有 RequestInterceptor 的 Retrofit。
问题是我发送的每个请求都有不同的 Header "Accept",所以我每次创建时都需要用 RequestInterceptor 更改 "Accept" header一个要求。
到目前为止我是这样做的:
private void updateApiMethodsFor(final String linkName) {
JacksonConverter jacksonConverter = new JacksonConverter();
RestAdapter restAdapter = new RestAdapter
.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(ROOT_URL)
.setConverter(jacksonConverter)
.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
ApiIndexLink1 apiIndexLink = getIndexLinkForName(linkName);
if (apiIndexLink != null) {
request.addHeader("Accept", apiIndexLink.getContentTypes().getContentTypeList().get(1));
}
}
})
.build();
apiMethods = restAdapter.create(BCApiMethods.class);
}
问题是,如果我每次都在发出请求之前调用它,它太昂贵了。有没有更好的方法来解决这个问题?
RequestInterceptor myRequestInterceptor = new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
ApiIndexLink1 apiIndexLink = getIndexLinkForName(linkName);
if (apiIndexLink != null) {
request.addHeader("Accept", apiIndexLink.getContentTypes().getContentTypeList().get(1));
}
}
};
private void updateApiMethodsFor(final String linkName) {
JacksonConverter jacksonConverter = new JacksonConverter();
RestAdapter restAdapter = new RestAdapter
.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setEndpoint(ROOT_URL)
.setConverter(jacksonConverter)
.setRequestInterceptor(myRequestInterceptor)
.build();
apiMethods = restAdapter.create(BCApiMethods.class);
}
在这里,瓶颈是每次都创建一个新的拦截器。您可以通过使用拦截器变量
来克服这个问题