安卓:表示接口的所有字段都@Nullable



我正在使用Retrofit从REST API加载数据。

我知道这个 API 有时会返回部分结果:有时缺少某些字段。

为了确保我正确处理这些情况,我目前正在定义 API 的接口中使用@Nullable注释字段:

class RedactedForecast implements Serializable {
@Nullable String date;
@Nullable String time;
@Nullable String overview_title;
@Nullable String overview;
@Nullable String forecast_title;
@Nullable String forecast;
}

但是,由于结果对象很复杂,因此在任何地方添加此注释并不方便。

有没有办法说类中的所有字段都可能为空?有没有更好的方法来解决这个问题?

但是,

由于结果对象很复杂,因此在任何地方添加此注释并不方便。

分离结构并将数据映射到部分对象,以便于开发。

不幸的是,没有简单的方法来注释整个类,它将某个注释应用于其所有字段。

如果你仍然依赖这个解决方案,我建议你看看库Javassist,它为此提供了一个解决方案。这是用法作为实际存在问题的答案的示例。

当您收到数据时,请在响应中将其存储在数组列表中,例如:

ArrayList vList=response.body();

在这里,所有数据然后存储在 vList 对象中。

现在在这个活动中创建一个函数,如下所示:

public ArrayList getVideosPlz() {

ArrayList<RedactedForecast> videos = new ArrayList<>();
try {
for (int i = 0; i <vList.size() ; i++) {
RedactedForecast users1=new RedactedForecast();
String id=vList.get(i).getId();
if(id!=null)
{
users1.setId(id);
}
videos.add(users1);
}
} catch (Exception e) {
Toast.makeText(MainActivity.this, "Sorry Server Down. Try again!!!", Toast.LENGTH_SHORT).show();
}
return videos;
}

在上面的函数中,您可以看到,只有当数据 !=null 时,数据才会设置为称为 videos 的新数组,最后当收到所有数据时,这个"videos"对象返回并在改造中接收 onResponse 为:

ArrayList receiveData=getVideosplz();

最后,您可以将此接收数据传递到您的回收器视图等。

希望对您有所帮助。谢谢!!!

一个更好的解决方案是使用 Kotlin,这使得安全处理null变得更加容易。

相关内容

  • 没有找到相关文章

最新更新