我正在使用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
变得更加容易。