改进Android:方法调用' getSuccess'可能会产生' java.lang.NullPointerException'

时间:2017-09-06 06:20:57

标签: java android nullpointerexception retrofit

我使用Retroft和GSON来解析响应。

我的onResponse代码如下所示

@Override
public void onResponse(@NonNull Call<ResultList> call, @NonNull Response<ResultList> response) {
    if (response.isSuccessful()) {
        if (response.body() != null && response.body().getSuccess() == 1) {
            ................

我正在检查response.body() != nullresponse.isSuccessful()。 我仍在线上response.body().getSuccess()的Android工作室收到警告。

如何避免此警告?

我正在使用改装:2.3.0和gson:2.8.1。 我已经尝试过这个问题的解决方案(Retrofit Method invocation may produce 'java.lang.NullPointerException' )。但它无法正常工作

1 个答案:

答案 0 :(得分:2)

方法Response.body()使用@Nullable注释声明,这意味着它的返回值可能为null。如果要避免此警告,则必须在调用方法之前检查返回的值是否为null。

您的问题包括以下代码:

if (response.body() != null && response.body().getSuccess() == 1)

听起来你希望这会删除警告,但事实并非如此。这是因为linter无法知道body()的第二次调用将返回与第一次调用相同的值。相反,写下这个:

ResultList body = response.body();
if (body != null && body.getSuccess() == 1) {
    ...
}