ArrayListのiterator.remove()はAsyncHttpClient内IllegalStateExceptionがスローされます

TYN:

私は、サーバーへのいずれかでのArrayList 1の各項目を提出するPOSTを行うHttpClientをしようとしています。ここに私のコードの一部抜粋は以下のとおりです。

    ArrayList<String> testArrayList = new ArrayList<>();
    testArrayList.add("Item 1");
    testArrayList.add("Item 2");

    final Iterator<String> iterator = testArrayList.iterator();

     while(iterator.hasNext()){

            for(int i = 0; i<testArrayList.size(); i++){
                 currentContent += "| " + testArrayList.get(i) + " | ";
            }

        currentItem = iterator.next();  

        final String url = "some url here"

        RequestParams params = new RequestParams();
        params.add("item_name", currentItem);

        new AsyncHttpClient().post(url, params, new AsyncHttpResponseHandler( {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {

                Toast.makeText(context, "Removing..", Toast.LENGTH_SHORT).show();
                iterator.remove();

            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {

            }
        });
    }

問題があるiterator.remove()、常にIllegalStateExceptionがスローされます。AsyncHttpClientが関与していない場合は発生しません。私は試してみました:

  • 私は入れて試したiterator.next()範囲内onSuccess()(無RequestParamsちょうどそれを試して、この場合には追加された)が、それは立ち往生していないが応答することをアプリになります。(私の場合は、実際に外にそれを維持したいと思いonSuccess()、私は私を取得する場所イテレータからなのでRequestParams
  • 私は同様の質問を探してきました。問題のほとんどは呼び出さないによって引き起こされるiterator.next()前にiterator.remove()私はそれを持っていますが、私のコードはまだ機能していません。もう一つのよくある原因は次のようになりiterator.remove()、内側のループ内で呼び出されるが、それは私の場合ではありません。

私は数週間のために、この問題で立ち往生してきました。私を助けてください。

Ramees Thattarath:

あなたは、この方法は、自分自身を呼び出す再帰を利用することができます。

 ArrayList<String> testArrayList = new ArrayList<>();
        testArrayList.add("Item 1");
        testArrayList.add("Item 2");    


    void submitItem(ArrayList<String> items){

    final String url = "some url here"

    RequestParams params = new RequestParams();
    params.add("item_name", currentItem);

 new AsyncHttpClient().post(url, params, new AsyncHttpResponseHandler( {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] 
             responseBody) {


                items.remove(0);
                Toast.makeText(context, "Removing..", Toast.LENGTH_SHORT).show();
                if(ites.size() > 0) submitItem(items);

            }

            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {

            }
        });

}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=120016&siteId=1