tyn:
Estoy tratando de hacer HttpClient POST para enviar cada elemento de un ArrayList uno por uno para el servidor. Éstos son algunos fragmentos de mis códigos:
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) {
}
});
}
El problema es iterator.remove()
siempre tirar IllegalStateException. Esto no sucede si AsyncHttpClient no está involucrado. Lo que he intentado:
- He intentado poner
iterator.next()
dentroonSuccess()
(sinRequestParams
agregado en este caso, sólo para probarlo) pero causa la aplicación atascado y no responde. (En mi caso, yo en realidad le gustaría mantener fueraonSuccess()
porque desde el iterador es donde voy a recuperar miRequestParams
) - He buscado preguntas similares. La mayoría de los problemas son causados por no haber llamado
iterator.next()
antesiterator.remove()
. Lo tengo, pero mi código todavía no está funcionando. Otra causa frecuente sería laiterator.remove()
que se llama dentro de un bucle interno, pero ese no es mi caso.
He estado atascado en este problema durante semanas. Por favor, ayúdame.
Ramees Thattarath:
Puede hacer uso de una recursividad, donde el método llama a sí misma.
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) {
}
});
}