安卓:表示该接口的所有领域都@Nullable

问题描述:

我从一个REST API使用改造加载数据。安卓:表示该接口的所有领域都@Nullable

我知道,这个API有时返回部分结果:某些字段有时也不见了。

为了确保我妥善处理这些情况,我目前注释等领域的@Nullable在定义API接口:

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

但是加入这个注释处处不方便,因为结果对象是复杂的。

有没有办法说,所有从一个类中的字段有可能为空?有没有更好的方法来处理这个问题?

+1

怀疑它,因为基元例如不能为空 –

但是,由于结果对象是复杂的,所以无处不在添加此注释并不方便。

将结构和地图数据分离为部分对象以便于开发。

不幸的是没有签注施加一定的注释所有的字段全班没有简单的方法。

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

在回信如果收到的数据然后存储在数组列表等:

的ArrayList VLIST = response.body();

在这里,所有的数据然后存储在VLIST对象。

本次活动

现在做一个功能,如:

公众的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,则数据将!设置为新阵列称为视频,并在最后收到所有数据时,然后这个“视频”对象返回并在改进onResponse接收为:

ArrayList receiveData = getVideosplz();

最后,你可以通过这个rec​​eiveData的到您的recyclerview等

希望它帮助。谢谢!!!

+0

'@ Nullable'的想法是使用静态分析来指出你的代码中的NPE可能发生的位置,以确保你正确处理它。通常你想根据缺失的字段做一些特定的事情。 – MasterScrat