2016-05-17 64 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