【问题标题】:Android studio, why does progressbar disappear before asynctasks are complete?Android Studio,为什么在异步任务完成之前进度条消失了?
【发布时间】:2020-07-10 00:23:03
【问题描述】:

我在 Android Studio 中有以下 Asyntask

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

为什么不等DoInBackground中的任务完成才消失?

任何建议将不胜感激。我是初学者,所以如果这确实是一个愚蠢的问题,请原谅这个愚蠢的问题。 DoInBackground 中的任务是调用 volley requests,它将数据从远程 sql 数据库 复制到设备 sqlite 数据库。 p>

谢谢。

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】:

    问题在于 onProgressUpdate 方法。

    文档

    onProgressUpdate() : 这个方法接收进度更新 doInBackground 方法,通过 publishProgress 方法发布, 而且这个方法可以使用这个进度更新来更新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/

    【讨论】:

      猜你喜欢
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多