У меня есть AsyncTask
, который отправляет данные на сервер. Для каждой записи в базе данных SQL существует 1 вызов. После завершения HTTP-вызова эта запись помечается как «загруженная». И мне нужно сделать это для всех записей, которые не помечены как «загруженные».
public void sync (final Context context, final boolean manualSync, final boolean rosterOnly, final String type) {
if ( unsentScansObjects == null ) {
Log.d(TAG, "sync: Loading Unsent Scans from Database...");
unsentScansObjects = unsentScans();
}
if ( unsentScansObjects.size() != 0 ) {
isUploading = true;
final ScanModel model = (ScanModel) unsentScansObjects.get(0);
UploadTask upload = (UploadTask) new UploadTask(mContext);
upload.completionBlock = new PPCompletionBlock() {
@Override
public void onCompletion(Boolean success, JSONObject object, String error) {
// Scan was marked as "uploaded", remove it from the array
unsentScansObjects.remove(model);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// Keep calling sync until unsentScansObjects.size() == 0
sync(context, manualSync, rosterOnly, type);
}
},500);
}
};
upload.execute(model);
}
else {
isUploading = false;
unsentScansObjects = null;
}
}
Есть ли более эффективный способ загрузки всех сканов, пока не останется ни одного?
Я попробовал do {upload (); } while (unsentScansObjects.size ()! = 0); , но мне нужно подождать, пока каждый http-вызов и сканирование, помеченные как «загруженные», завершатся, прежде чем перейти к следующему.
Я сделаю обратите внимание, что этот метод работает очень хорошо, но клиент запросил его как функцию типа «EOF», вызов 1 (не зацикливание).