2015-11-11 59 views
0

我目前正在爲我的Android應用程序使用Retrofit 1.9.0。我開發了一個REST服務。爲了從REST獲取數據,我實現了以下代碼。我想從服務器端獲取基於ID字符串的員工列表。爲什麼改造在第二次後給出正確的結果?

if(!ids.isEmpty()) { 
    retrofitService.getNewStaffInfo(ids, new Callback<List<StaffInfo>>() { 
       @Override 
       public void success(List<StaffInfo> staffInfos, Response response) { 
        System.out.println(staffInfos.size()); 
        for (StaffInfo staff : staffInfos) 
         mStaffInfo.add(staff); 
        // update the local database 
       } 
       @Override 
       public void failure(RetrofitError error) { 
        System.out.println("error"); 
       } 
      } 
    ); 
} 
System.out.println(mStaffInfo.size()); 

但是,我的問題是,我得到了兩次結果。第一次,結果列表的大小爲零,但在第二次時,我得到的結果不是零。

我會很感激,如果有人有解決方案,爲什麼列表結果的大小在第一次爲零?

回答

0

使用回調時,直到網絡請求完成時,回調中的代碼纔會運行。同時,你的程序繼續運行代碼。在你的情況下,你啓動呼叫,並在它完成之前嘗試打印出你的清單的大小。然後,當通話完成時,再次打印列表的大小。我在下面註釋了問題行。刪除它只會打印一次正確的尺寸。

if(!ids.isEmpty()) { 
    retrofitService.getNewStaffInfo(ids, new Callback<List<StaffInfo>>() { 
       @Override 
       public void success(List<StaffInfo> staffInfos, Response response) { 
        System.out.println(staffInfos.size()); 
        for (StaffInfo staff : staffInfos) 
         mStaffInfo.add(staff); 
        // update the local database 
       } 
       @Override 
       public void failure(RetrofitError error) { 
        System.out.println("error"); 
       } 
      } 
    ); 
} 
System.out.println(mStaffInfo.size()); <---- *** This line runs before the call back and prints out the zero size. Remove it. 
相關問題