Retrofit方法调用可能会产生'java.lang.NullPointerException'

时间:2017-07-31 18:30:19

标签: android nullpointerexception retrofit

使用Retrofit 2.3.0我在Android Studio中收到以下消息

enter image description here

有关如何删除此IDE错误消息的任何建议。感谢

1 个答案:

答案 0 :(得分:12)

来自Response documentation

@Nullable
public T body()
     

成功回复的反序列化响应主体。

这意味着response.body()可以返回null,因此,调用response.body().getItems()可以抛出NullPointerException。要避免出现警告消息,请在调用方法之前检查response.body() != null

修改

关于另一个问题的讨论表明,我上面的陈述并不像他们需要的那样明确。如果原始代码是:

mAdapter.addItems(response.body().getItems());

通过包装这样的空检查不会解决它:

if (response.body() != null) {
    mAdapter.addItems(response.body().getItems());
}

linter(生成警告的东西)无法知道每个response.body()调用将返回相同的值,因此第二个仍然会被标记。使用局部变量来解决这个问题:

MyClass body = response.body();
if (body != null) {
    mAdapter.addItems(body.getItems());
}