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) {
}
});
}