2016-05-17 66 views
0

任何人都可以幫我弄清楚這個(對我來說)奇怪的錯誤。我一直在看它幾個小時,仍然無法弄清楚,我在網上也找不到任何東西。添加對象後,列表大小返回0

我使用retrofit2和OkHttp3來進行一些GET API調用。不知怎的,當我得到一個響應(這是成功的& &體內確實含有什麼有),我嘗試將其添加到列表中,在循環結束時,列表的大小返回0

final List<Object> objectList = new ArrayList<>(); 

final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity); 

... 

dialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 

       API someAPI = new API(); 

       for (int i = 0; i < listWithIds.size(); i++) { 
        Call<Object> call = someAPI.getObject(listWithIds.get(i).getId()); 
        final int finalI = i; 
        call.enqueue(new Callback<Object>() { 
         @Override 
         public void onResponse(Call<Object> call, Response<Object> response) { 

          if (response.isSuccessful()) { 

           objectList.add(response.body()); 

          } 

         } 

         @Override 
         public void onFailure(Call<Object> call, Throwable t) { 

         } 
        }); 
       } 

      } 
     }); 
+0

回調是異步的,你是否在隊列外或回調中檢查列表大小? – lubilis

+0

'List'只在大小爲0的情況下才會返回0。因此,您需要檢查是否調用了'add'。 –

+0

'finalI'變量的目的是什麼?爲什麼不使用增強的for-loop? –

回答

3

隊列是異步的,你正在檢查循環內部的列表大小,但在隊列外部,這太早了。列表大小仍爲零,因爲您正在回調響應中添加對象。

嘗試檢查回調委託中的列表大小。

+0

傻了,非常感謝你! (: – tom12e