改造改变RequestInterceptor

时间:2015-09-07 10:58:04

标签: android retrofit interceptor

我正在使用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);
}

问题在于,如果我在提出请求之前每次都这样打电话,那就太贵了。有没有更好的方法来解决这个问题?

1 个答案:

答案 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);
}

这里,瓶颈每次都在创建一个新的拦截器。你可以通过拥有一个拦截器变量

来克服这个问题