android - 进度对话框不会在 AsyncTask onProgressUpdate 上更新

标签 android multithreading dialog ui-thread

我正在开发 Android 3.1 及更高版本的应用程序。

我有这个代码来下载一些 json 数据:

public class FormsListActivity extends ListActivity
{
    private List<Form> mForms;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.formlist);

      FormListAsyncTask formAsyncTask = new FormListAsyncTask(this);
      formAsyncTask.execute("http://192.168.1.128/RestServiceImpl.svc/forms/");
    }

    private class FormListAsyncTask extends AsyncTask<String, Integer, List<Form>> {

        private Context mContext;
        private ProgressDialog loadingDialog;

        FormListAsyncTask(Context context)
        {
            mContext = context;
            loadingDialog = new ProgressDialog(mContext);
            loadingDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            loadingDialog.setMessage("Downloading. Please wait...");
            loadingDialog.setCancelable(false);
            loadingDialog.setMax(100);
            loadingDialog.show();
        }

        @Override
        protected List<Form> doInBackground(String... url)
        {
            Log.v("doInBackground", "retreiving forms");
            return FormSpringController.LoadAll(url[0]);
        }
        // Just some example code to update your progress dialog
        protected void onProgressUpdate(Integer... values)
        {
            Log.v("onProgressUpdate", "updating: " + ((int) ((values[0] / (float) values[1]) * 100)));
            loadingDialog.setProgress((int) ((values[0] / (float) values[1]) * 100));
        }

        protected void onPostExecute(List<Form> forms)
        {
            if (forms != null)
            {
                ListActivity act = (ListActivity) mContext;
                act.setListAdapter(new FormAdapter(act, R.layout.form_list_item, forms));
                mForms = forms;
            }
            else
            {
                TextView errorMsg = (TextView)
                        ((FormsListActivity) mContext).findViewById(R.id.formErrorMsg);
                errorMsg.setText("Problem downloading forms. Please try again later.");
            }
            loadingDialog.dismiss();
        }
    }
}

为什么loadDialog的进度没有在onProgressUpdate上更新?

最佳答案

我在您的代码中没有找到任何 publishProgress();

doInBackground()调用publishProgress(),它隐式调用覆盖onProgressUpdate()

关于android - 进度对话框不会在 AsyncTask onProgressUpdate 上更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10152443/

相关文章:

Android Room 不接受通用字段类型

java - EditText 错误不起作用

android - 处理方向改变android

multithreading - NodeJS 真的是单线程的吗?

javascript - jQuery 如何从对话框中的 iframe 关闭对话框?

android - 将图像动态加载到对话框中

android - 从我的应用程序上的图库(SD 卡)中挑选图像...... ¿如何只允许最大 500kb 的照片?

java - 在单独的线程中处理文件写入的正确方法

c# - 无法从 'System.Threading.Tasks.Task' 转换为 'System.Collections.Generic.Dictionary<string,string>'

angular - 我如何制作 MatDialog 可拖动/Angular Material