2016-05-17 18 views
0

誰かが私にこの(私にとって)奇妙なバグを理解させる手伝いができますか?私は何時間もそれを見てきましたが、まだそれを理解することはできません、私は同様にWeb上で何かを見つけることはできません。リストサイズはオブジェクトを追加した後に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

関連する問題