android - 如何让asynctask正常工作

标签 android

我的应用程序上有一个按钮,如果用户单击它,它将通过调用 onResume() 刷新当前页面,并且 onResume() 中有很多数据库操作。我不想让按钮保持按下一段时间,而是想使用 asynctask 在加载数据时创建进度对话框。但问题是按钮仍处于按下状态,并且进度对话框仅在操作结束时显示很短的持续时间。

RefreshButton.setOnClickListener(new OnClickListener()
        {

            public void onClick(View v)
            {
                onResume();
            }
        });

protected void onResume()
    {
        doneloading = false;
        monResumeloading = new onResumeloading();
        monResumeloading.execute();
        ....loading...

            doneloading = true;
    }

private class onResumeloading extends AsyncTask<Integer, Integer, String>
    {
        private ProgressDialog progressDialog;
        @Override
        protected void onPostExecute(String result)
        {
            progressDialog.dismiss();
        }

        @Override
        protected void onPreExecute()
        {
            progressDialog = new ProgressDialog(StatisticsActivity.this);
            progressDialog.setMessage("Loading...");
            progressDialog.setCancelable(true);
            progressDialog.show();

            Log.i(TAG, "              doneloading=false");
        }

        @Override
        protected void onProgressUpdate(Integer... values)
        {

        }

        @Override
        protected String doInBackground(Integer... params)
        {
            while(!doneloading)
            {
                publishProgress(0);   //dummy
                            log.i(TAG, "loading");
            }
            return null;
        }


    }

我观察到“正在加载”日志在异步任务执行后立即显示,并在 bool 完成加载变为 false 后立即停止。但进度对话框无法正常工作。请帮助我:(

最佳答案

首先,我认为您不应该在 onResume() 函数中调用 AsyncTask。您只需从 ClickListener 中调用它即可。

现在,您正在执行“...正在加载...”代码,甚至在执行 AsyncTask 之前。这就是为什么按钮在执行“....正在加载...”时保持按下状态,然后当它完成时,它会执行你的 AsyncTask,它实际上没有做任何事情 - 这就是为什么它只显示很短的持续时间。

将您的“....正在加载...”代码移至 AsyncTask 的 doInBackground() 中,它应该可以正常工作。

摘要:

  1. 点击:执行AsyncTask
  2. AsyncTask:打开 ProgressDialog
  3. AsyncTask:执行“...正在加载...”代码
  4. AsyncTask:WAITING“...正在加载...”代码完成,同时仍显示对话框。
  5. AsyncTask:关闭 ProgressDialog

关于android - 如何让asynctask正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12612416/

相关文章:

android - 在 android sqlite 中使用 IN 关键字

Android 在每次测试开始时撤销权限

android - 不要让推送通知下拉

android - map 刷新问题 mapview.invalidate() method is not working

Android 使用 BroadcastReceiver 打开浏览器

android - 如何将两个查询合并为一个?

java - Android:x 秒后多次更新 gridview

Android Recycler Adapter 位置无法正常工作 : onClick handling doesn't work properly

php - 连接 DB MySql Android 应用程序

android - 如何从 com.google.android.material.textfield.TextInputLayout 中删除背景错误红色