Android:表示接口的所有字段都是@Nullable

时间:2017-09-27 08:31:51

标签: java android null retrofit 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;
}

然而,在任何地方添加此注释都不方便,因为结果对象很复杂。

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

3 个答案:

答案 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