改造标头NullPointerException

时间:2014-07-08 09:00:04

标签: java android header retrofit

我有改造和自定义RequestInterceptor的问题。我正在尝试将内容类型的标头添加到我发出的每个请求中,所以我自定义了RequestInterceptor:

new RestAdapter.Builder().
setEndpoint(Configuration.BASE_ENDPOINT).
setRequestInterceptor(new RequestInterceptor() {
                @Override
                public void intercept(RequestFacade request) {
                    request.addHeader("Content-type", "application/json");
                }
            }).
build();

但是当我尝试调用某些API时会抛出 NullPointerException

我将问题追溯到RequestBuilder类到这一行:

headers.add(new Header("Content-Type", contentTypeHeader));

错误:

 on line 344 : ArrayList headers is null. 

你知道我做错了什么吗?我在其他项目中使用了这个确切的代码,它运行得很好。

由于

1 个答案:

答案 0 :(得分:1)

看起来像是Retrofit中的一个错误。 RequestBuilder类中的标题列表是惰性初始化的,如果仅通过"Content-Type"添加RequestInterceptor标题,则标题列表不会被初始化。只要添加不同于"Content-Type"的额外标头,此问题就会消失。 "Content-Type"标头在代码中的处理方式不同,如果它是唯一提供此问题的标头。

如果"Content-Type"是您要拦截的唯一标题,那么为了解决此问题,我只需使用@Headers("Content-type: application/json") @注释您的界面,您就可以绕过它

@Headers("Content-type: application/json")
@GET("/some_resource_path")
Response getData();

我为它创建了一个问题here