Android ProgressBar не обновляется при вставке данных в локальную базу - PullRequest
1 голос
/ 19 января 2020

У меня проблема с обновлением прогрессбара. Здесь я делаю пользовательскую функцию индикатора выполнения, как показано ниже:

ProgressDialog progressBar1;
    private int progressBarStatus = 0;
    private void customProgressBar(){
        progressBar1 = new ProgressDialog(DictionaryActivity.this);
        progressBar1.setCancelable(true);
        progressBar1.setMessage("Downloading File...");
        progressBar1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressBar1.setMax(100);
        progressBar1.setProgress(0);

        progressBar1.show();

        //reset progress bar status
        progressBarStatus = 0;

        new Thread(new Runnable() {
            public void run() {
                while (progressBarStatus < 100) {

                    Log.d("TAG", "run: pStatus" + " " + pStatus);


                    try {
                        Thread.sleep(1000);
                    }
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    // call progressBar status data update
                    progressBarStatus = setProgressBarStatus();

                    new Handler(Looper.getMainLooper()).post(new Runnable(){
                        @Override
                        public void run() {
                            progressBar1.setProgress(progressBarStatus);
                            Log.d("TAG", "run: handler: " +progressBarStatus);
                        }
                    });

                }

                // when, file is downloaded 100%,
                if (progressBarStatus >= 100) {

                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    // close the progress bar dialog
                    progressBar1.dismiss();
                }
            }
        }).start();
    }

    public int setProgressBarStatus(){
        return progressBarStatus += 2;
    }

Затем вызываю ее из функции загрузки данных. Когда загрузка данных завершена, я вставляю данные в БД SQLite (локальный дБ).

Здесь перед вставкой данных strat обновляется индикатор выполнения. Но при указании данных для вставки индикатор выполнения не обновляется. Как можно решить эту проблему? Спасибо всем.

1 Ответ

0 голосов
/ 19 января 2020

Я решил эту проблему. После 3 часов исследований я обнаружил, что когда я добавляю функцию вставки (откуда я вызываю DB для вставки) в Thread и отправляю обновленное значение прогресса в Progress Thread. Тогда все работает отлично и setProgress() обновляет прогресс.

int pStatus = 0;
public void dataInsertinoUsingThread(final Example data){
    new Thread(new Runnable() {
        @Override
        public void run() {

            for (int i=0; i<data.getData().getBanglaWordDictionary().size(); i++){

                .........

                pStatus+=i;

             }
         }
    }).start();
}

Спасибо всем. Если у кого-то есть проблемы такого типа. Вы можете следовать по этому пути. Кроме того, если кто-то найдет лучшее решение, чем мое, вы можете дать свой ответ или предложения.

...