Android: ДЕЛАЙТЕ ПРИ Асинхронных заданиях с OkHttpClient - PullRequest
0 голосов
/ 10 января 2020

У меня есть 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 (не зацикливание).

...