Я пытаюсь провести эксперимент с несколькими запросами, используя AsyncHttpClient из списка данных. Я использую AsyncTask для обработки нескольких запросов от них. Вывод, который я хочу ожидать, - когда все данные обновляются с помощью запроса, тогда вы можете ответить всеми данными (одной или несколькими данными), отправленными клиенту в одном ответе. Вот что я пытаюсь кодировать:
Это слушатель запроса кода при нажатии. Я передаю массив параметров Lamp (Lamp[] lamps
) для обработки в AsyncTask на множественный запрос
View.OnClickListener addDeviceListener = view -> {
// send to DeviceControllerTask
DevicesAdderTask adderTask = new DevicesAdderTask(handler, email);
Lamp[] lamps = listPhilipsHue.toArray(new Lamp[listPhilipsHue.size()]);
adderTask.execute(lamps);
};
Код Asynctask и JsonHttpResponseHandler
public class DevicesAdderTask extends AsyncTask<Lamp, Void, Integer> {
private ArrayList<Lamp> lampArrayList;
private String email;
private Handler handler;
public DevicesAdderTask(Handler handler, String email) {
this.handler = handler;
this.email = email;
}
@Override
protected Integer doInBackground(Lamp... lamps) {
final Integer[] count = {0};
for (Lamp lamp: lamps
) {
DeviceUserRequestTask.setPostAddUserDevice(email, lamp, 3, new JsonHttpResponseHandler(){
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
super.onSuccess(statusCode, headers, response);
System.out.println("response: "+response);
int status = 0;
try {
status = response.getInt("status");
} catch (JSONException e) {
e.printStackTrace();
}
if (status == 200 || status == 300) {
count[0]++;
System.out.println("count: "+ count[0]);
}
}
@Override
public boolean getUseSynchronousMode() {
return false;
}
});
}
return count[0];
}
@Override
protected void onPostExecute(Integer count) {
Log.d(TAG, "Post Execute result: "+count);
if (count>0) {
// send to handler success add
} else {
// send to error success add
}
}
}
Обработчик ответа работает хорошо, и нет проблема вообще. Но я обнаружил, что onPostExecute()
запускается первым до того, как обработчик ответа завершил подсчет, поэтому результат подсчета всегда 0
и обработка в «обработчике ошибок»