android - asyncTask 中的 ProgressDialog setProgress 和 setMessage 不起作用

标签 android android-asynctask android-progressbar

我有一个 asynktask,它显示一个 progressDialog 并在 doInBackground 方法中更新它的值。方法代码:

@Override
protected void onPreExecute() {
    progress = new ProgressDialog(cont);
    progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    progress.setIndeterminate(true);
    progress.setTitle(cont.getResources().getString(R.string.pleaseWait));
    progress.setMessage(cont.getResources().getString(R.string.loadingImages));
    progress.show();
    super.onPreExecute();
}

@Override
protected String doInBackground(Void... arg0) {
    progress.setProgress(2);
    //do some work on the database and network
    progress.setProgress(25);
    //Do some extra work
    for(int i = 0; i < itemImagesList.size(); i++){
        publishProgress((int) ((i / (float) itemImagesList.size()) * 100));
        //Do somework
    }
}

@Override
protected void onProgressUpdate(Integer... prog) {
    progress.setProgress(prog[0]);
}

@Override
protected void onPostExecute(String result) {
    progress.dismiss();
    super.onPostExecute(result);
}

progressDialog 值根本没有改变!如果我尝试使用以下方法设置对话消息:

progress.setMessage("At item "+i);

如果我把它放在方法的中间会发生一些异常,但在第一个它工作正常!

怎么了?

最佳答案

你的问题与 setIndeterminate(true); 有关,如果你想更新进度,你应该将它设置为 false(看看 Android setProgress doc ),不要忘记还使用 setMax() 将进度最大值设置为所需值。

正如 Laurent 所说,您只能在 UI 线程上更改进度,因此您必须在 onProgressUpdate 而不是在 doInBackground

中进行

关于android - asyncTask 中的 ProgressDialog setProgress 和 setMessage 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28983419/

相关文章:

android - 在 actionbar sherlock 中设置进度条颜色

android - 具有拉伸(stretch)复合可绘制对象的固定宽度 TextView

android - FinalizerReference导致的Service Binder内存泄露

java - 尝试在空对象引用上调用虚拟方法 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)'

java - Android并行执行多个AsyncTask

android - 更新 Android 中方向变化的进度条

android - 以编程方式导入 Room 数据库

java - 获取Android设备的服务器IP

android - AsyncTask 和 Progressbar

java - 如何创建带有加载动画的自定义 View - 从左到右填充自定义文本?