我正在使用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;
}
然而,在任何地方添加此注释都不方便,因为结果对象很复杂。
有没有办法说一个类中的所有字段都可能为空?有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
然而,在任何地方添加此注释都不方便,因为结果对象很复杂。
将结构解耦并将数据映射到部分对象,以便于开发。
不幸的是,没有简单的方法来注释整个类,它将某个注释应用于其所有字段。
如果您仍然依赖此解决方案,我建议您查看库Javassist,它为此提供了解决方案。 Here是用作实际存在问题的答案的示例。
答案 1 :(得分:0)
在收到数据的响应中,然后将其存储在数组列表中,如:
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时,数据才会被设置成一个名为视频的新数组,最后收到所有数据时,这个&#34;视频&#34;对象返回并在改造时响应onResponse:
ArrayList receiveData = getVideosplz();
最后,您可以将此receiveData传递到您的recyclerview等。
希望它有所帮助。感谢!!!
答案 2 :(得分:0)
更好的解决方案是使用Kotlin,这样可以更安全地处理null
。