java - 改造 header NullPointerException

标签 java android header retrofit

我对 retrofit 和自定义 RequestInterceptor 有疑问。我正在尝试向我发出的每个请求添加带有内容类型的 header ,所以我制作了这样的自定义 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. 

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

谢谢

最佳答案

似乎是 Retrofit 中的错误。 RequestBuilder 类中的 header 列表是延迟初始化的,如果您仅通过 RequestInterceptor 添加 "Content-Type" header ,则 header 列表不会被初始化。只要您添加不同于 "Content-Type" 的额外 header ,此问题就会消失。 “Content-Type” header 在代码中的处理方式不同,如果它是唯一的 header ,则会出现此问题。

如果 "Content-Type" 是您想要拦截的唯一 header ,那么为了解决这个问题,我会简单地使用 @Headers("Content-type : application/json") 并且你将能够绕过它。

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

我创建了一个问题 here

关于java - 改造 header NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24627695/

相关文章:

android - MotionEvent.getPointerCount() 始终为 1

c++ - 包含如何影响 C++ 中的执行时间?

java - android.widget.textview 无法转换为 android.widget.radiogroup

java - 将 Spark "Library"添加到 Scala 项目

java - NoClassDefException,从另一个包开始 Activity

android - 按下此按钮时,我正在尝试显示 toast 。但是代码不起作用

java - 如何计算 Checkbox 和 TextField 以获得总计

java - 理解 Thread.currentThread().getContextClassLoader().getResourceAsStream()

c++ - gcc v3.4.6 是否提供 tr1 header ?

c++ - 源文件中的函数已在另一个源文件中定义错误