Android studio, почему прогрессбар исчезает до завершения асинхронных задач? - PullRequest
0 голосов
/ 29 марта 2020

У меня есть следующее Asyntask в Android Studio .

Я сражаюсь, чтобы заставить работать индикатор выполнения, индикатор выполнения появляется, но затем сразу исчезает. Я хочу знать:

Почему он не ждет завершения задач в DoInBackground до его исчезновения?

Буду признателен за любой совет. Я новичок, поэтому прошу прощения за глупый вопрос, если это действительно глупый вопрос. Задачи в DoInBackground - это вызовы запросов залпа , которые копируют данные из удаленной sql базы данных в устройства sqlite база данных .

Спасибо.

public class AsyncTask extends android.os.AsyncTask<Integer, Integer, String> {

        ProgressBar pb;
        int status = 0;

        public void setProgressBar(ProgressBar progressBar) {
            this.pb = progressBar;
        }

        @Override
        protected void onPreExecute() {
            Log.d(TAG, "zzzzz2: " + "Pre");
            pb.setVisibility(View.VISIBLE);
            super.onPreExecute();
        }



        @Override
            protected String doInBackground(Integer[] objects) {

                Log.d(TAG, "zzzzz2: " + "DoIn");


//              if user doesnt exist in db add to server db
                String strUser = mFirebaseUser.getUid();
                String strDisplayName = mFirebaseUser.getDisplayName();
                String strEmail = mFirebaseUser.getEmail();
                clsServerClass.addUserToServer(strUser, strDisplayName, strEmail, context);

                // load 12 tables into sqlite database
                clsServerClass.copyTblVersions(context);
                clsServerClass.copyAnimalClassTable(context);
                clsServerClass.copyAnimalGroupTable(context);
                clsServerClass.copyAnimalTable(context);
                clsServerClass.copyTblSeasons(context);
                clsServerClass.copyRegions(context);
                clsServerClass.copyCountries(context);
                clsServerClass.copyProvinces(context);
                clsServerClass.copyHotspots(context);
                clsServerClass.copyHabitats(context);
                clsServerClass.getMyPlaces(strUser, context);
                clsServerClass.getSightingsUser(strUser, context);


                Cursor cntry = getCsr("animal_unique_key", "tbl_lookup_animals");
                Log.d(TAG, "yyyya: " + cntry.getCount());

                JSONArray arrayList1 = createListArray("animal_class_key", 1);
                createListSharedPref("List1_name", "List 1: All birds", "List1_where", arrayList1);

                JSONArray arrayList2 = createListArray("animal_class_key",  2);
                createListSharedPref("List2_name", "List 2: All Mammals", "List2_where", arrayList2);

                JSONArray arrayList3 = createListArray("animal_class_key", -99);
                createListSharedPref("List3_name", "List 3: All Animals", "List3_where", arrayList3);

                JSONArray arrayList4 = createListArray("animal_class_key", 3);
                createListSharedPref("List4_name", "List 4: All Reptiles", "List4_where", arrayList4);

                JSONArray arrayList5 = createListArray("animal_class_key", 4);
                createListSharedPref("List5_name", "List 5: All Amphibians", "List5_where", arrayList5);

                return null;

            }



        @Override
        protected void onProgressUpdate(Integer[] values) {

            Log.d(TAG, "zzzzz3: " + "Update");

            pb.setProgress(values[0]);
            super.onProgressUpdate(values);

        }


        @Override
        protected void onPostExecute(String s) {
            Log.d(TAG, "zzzzz2: " + "post");
            pb.setVisibility(View.GONE);
            super.onPostExecute(s);
        }




        }

1 Ответ

0 голосов
/ 03 апреля 2020

Проблема заключается в методе onProgressUpdate.

Документы

onProgressUpdate (): этот метод получает обновления прогресса от метода doInBackground, который публикуется с помощью метода publishProgress, и этот метод может использовать это обновление прогресса для обновления потока пользовательского интерфейса

Поскольку вы не передаете никакого значения в onProgressUpdate, индикатор выполнения немедленно исчезает.

В методе doInBackground после Log.d(TAG, "zzzzz2: " + "DoIn");

Добавить

publishProgress(5); // Calls onProgressUpdate()
//5 is just an example integer

Теперь все должно работать нормально.

Чтобы узнать больше о том, как лучше использовать onProgressUpdate (), проконсультируйтесь https://www.tanelikorri.com/tutorial/android/asynctask-tutorial/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...