Pri*_*iya 9 java android retrofit retrofit2
我正在使用Retrofit 2从我的API获取响应并将其值存储在我的常量中,如下所示
if(response.isSuccessful()) {
constant.banner_on = response.body().getBanner_on();
constant.int_on = response.body().getInt_on();
constant.int_click = response.body().getInt_click();
}
Run Code Online (Sandbox Code Playgroud)
它给了我三个警告,如下所示
Method invocation getBanner_on may produce java.lang.nullPointerException
Run Code Online (Sandbox Code Playgroud)
我很困惑,无法解决此警告.让我知道是否有人可以帮我从这里出来.
谢谢
Nab*_*ari 11
这只是一个警告,因为如果响应成功,它将永远不会为空.您可以忽略它或环绕if(response.body() != null)以删除警告.
Ads ads = response.body();
if(ads != null){
constant.banner_on = ads.getBanner_on();
// and so on.
}
Run Code Online (Sandbox Code Playgroud)
使用if很棒,但只有一行,更简洁的方法是:
constant.banner_on = ads != null ? ads.getBanner_on() : null;
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Java 8,您可以在赋值之前进行断言:
Ads ads = response.body();
assert ads != null;
constant.banner_on = ads.getBanner_on();
Run Code Online (Sandbox Code Playgroud)
另一种方法是在赋值之前使用Objects.requireNonNull():
constant.banner_on = Objects.requireNonNull(ads.getBanner_on());
Run Code Online (Sandbox Code Playgroud)
这实际上主要是为了参数验证而设计的。源码注释:
/**
* Checks that the specified object reference is not {@code null}. This
* method is designed primarily for doing parameter validation in methods
* and constructors, as demonstrated below:
* <blockquote><pre>
* public Foo(Bar bar) {
* this.bar = Objects.requireNonNull(bar);
* }
* </pre></blockquote>
*
Run Code Online (Sandbox Code Playgroud)
关于这个问题的一个很好的答案就在这里。另请阅读本文以了解为什么我们需要显式检查。。
| 归档时间: |
|
| 查看次数: |
25267 次 |
| 最近记录: |