Android Studio,为什么进度条在异步任务完成之前就消失了?

问题描述 投票:0回答:1

我在Android Studio中具有以下Asyntask。

尽管我正在努力使进度条工作,但进度条会弹出,但随后立即消失。我想知道:

为什么它在消失之前不等待DoInBackground中的任务完成?

任何建议将不胜感激。我是一个初学者,所以如果这个问题确实很愚蠢,请原谅。DoInBackground中的任务是对volley request的调用,该调用将数据从远程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);
        }




        }
android-studio android-asynctask android-progressbar
1个回答
0
投票

问题出在onProgressUpdate方法中。

文档

onProgressUpdate():此方法从以下位置接收进度更新通过publishProgress方法发布的doInBackground方法,并且此方法可以使用此进度更新来更新UI线程

由于您没有将任何值传递给onProgressUpdate,因此进度条将立即消失。

Log.d(TAG, "zzzzz2: " + "DoIn");之后的doInBackground方法中>

添加

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

现在,它应该可以正常工作。

要了解有关如何更好地利用onProgressUpdate()的更多信息,请参阅https://www.tanelikorri.com/tutorial/android/asynctask-tutorial/

© www.soinside.com 2019 - 2024. All rights reserved.