2017-09-27 63 views
0

我從一個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

懷疑它,因爲基元例如不能爲空 –

回答

1

但是,由於結果對象是複雜的,所以無處不在添加此註釋並不方便。

將結構和地圖數據分離爲部分對象以便於開發。

不幸的是沒有簽註施加一定的註釋所有的字段全班沒有簡單的方法。

如果仍然依靠這個解決方案,我建議你採取庫Javassist,它提供了一個解決方案來看看。 Here是作爲實際存在問題的答案的用法示例。

0

在回信如果收到的數據然後存儲在數組列表等:

的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