改造变更 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);
}

在这里,瓶颈是每次都创建一个新的拦截器。您可以通过使用拦截器变量

来克服这个问题