【发布时间】:2017-08-01 09:58:03
【问题描述】:
自版本 retrofit2.retrofit:2.3.0 以来,即使在之前检查 null 的正文时,我也会在 response.body() 上收到 NullPointerException 警告:
Method invocation 'getCar()' may produce 'java.lang.NullPointerException'
在2.3.0 的更新日志中有一个与空检查相关的条目:
Retrofit 现在使用 @Nullable 来注释所有可能为空的值。 [...] 我们使用 @ParametersAreNonnullByDefault 并且所有参数和返回类型永远不会为空,除非显式注释 @Nullable。
这是预期的行为吗?在我看来response.body() 应该是不可变的,所以我在图片1 中的检查不应该显示警告。
这不是关于NullPointerExceptions 的问题 - 这是关于如何正确处理 Retrofit2 响应的方式。为了暂时没有警告,我必须这样做:
if(response != null) {
CarResponseBody body = response.body();
if (body != null && body.getCar() != null){
CarResponse car = body.getCar();
}
}
很多代码只是为了检查是否有有效的响应......
【问题讨论】:
-
可能是警告,因为
body()可能会在第一次调用时返回非空值,然后在第二次调用时返回空值? -
警告理论上是正确的。仅仅因为
body()在您第一次调用它时返回了一些东西,并不意味着它不会在您下次调用它时返回 null。 -
我知道 NullPointerException 是什么,谢谢!这个问题更像是 Jon Skeet 说的:为什么
body()在第二次调用时可能会返回不同的东西?我会稍微编辑一下问题。 -
如果有来自 Retrofit 的人回答这个问题或者至少提供一些建议会很好,因为他们建议在 stackoverflow 中发布这些内容,而不是在 GitHub 上打开问题
标签: java android retrofit retrofit2