我正在使用AsyncTask来处理复杂的后台操作(编译要发送的日志文件),我使用ProgressDialog来显示用户进度。我已经尝试过使用showDialog()但它似乎永远不会显示或解散(它永远不会被调用),我按照教程了解如何做到这一点...... 所以我使用的是非托管的,它不会忽略我的信息。我也想更新消息,因为它开始编译日志文件(因为它似乎滞后于那里 - 或者文本视图可能很长,因此它不会像它应该的那样更新)。
我已将代码移动一点,所以看起来有问题(比如onProgressUpdate()),但我不知道如何让它工作。我环顾了这个网站,似乎没有任何问题我(不完全相反)。 RunOnUiThread()不起作用,新的Thread(){}不起作用,onProgressUpdate()我无法工作(文档令人困惑)。
它也永远不会解散。我已经建立了一个听众,它永远不会解散。
有谁知道我的代码出了什么问题?我认为AsyncTask应该很简单。
private class BuildLogTask extends AsyncTask<Void, Void, String> {
String temp;
ProgressDialog progressdialog = new ProgressDialog(context); //variable is defined at onCreate (held as private, not static)
@Override
protected String doInBackground(Void... params) {
temp = buildLog();
logdata = temp;
publishProgress();
createLogFile();
return temp;
}
protected void onProgressUpdate() {
progressdialog.setMessage("Compiling Log File...");
}
@Override
protected void onPreExecute() {
Log.w(TAG,"Showing Dialog");
send.setEnabled(false);
ProgressDialog progressdialog = new ProgressDialog(context);
progressdialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressdialog.setMessage("Gathering Data...");
progressdialog.setCancelable(false);
progressdialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
Log.e(TAG,"Progress Dialog dismissal.");
}
});
progressdialog.show();
}
@Override
protected void onCancelled(){
Log.e(TAG,"Progress Dialog was Cancelled");
progressdialog.dismiss();
logdata=null;
}
@Override
protected void onPostExecute(String result) {
progressdialog.dismiss();
send.setEnabled(true);
previewAndSend();
}
}
答案 0 :(得分:2)
你有两个不同的进度对话框,一个是onPreExecute()的本地对象,另一个是全局的。你在onPostExecution()中解雇的那个是你从未真正展示过的全局版本。删除本地声明,它应该工作。
答案 1 :(得分:0)
有两个问题。
onProgressUpdate上的签名不正确。试试这个:
@覆盖 protected void onProgressUpdate(Void ... progress){ progressdialog.setMessage(“编译日志文件......”); }
您在onPreExecute()中使用局部变量屏蔽progressDialog成员变量
编辑:发现第二个问题:
答案 2 :(得分:0)
试试吧,
替换:
progressdialog.show();
有关:
progressdialog = progressdialog.show();
祝你好运。