我正在使用ReInofit和RequestInterceptor。
问题在于我发送的每个请求都有不同的标题"接受",所以我需要更改"接受"每次我创建一个请求时,我都会使用RequestInterceptor。
到目前为止,我这样做:
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);
}
问题在于,如果我在提出请求之前每次都这样打电话,那就太贵了。有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
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);
}
这里,瓶颈每次都在创建一个新的拦截器。你可以通过拥有一个拦截器变量
来克服这个问题