在搜索类似的线程后,仍然无法找到我的AsyncTask代码中的问题。
永远不会激活publishProgress
方法,请使用断点进行检查。
这是AsyncTask类:
public class workerThread extends AsyncTask<Void, Integer, Void> {
private int completed;
protected void onProgressUpdate(int... arg0) {
progressBar.setProgress(arg0[0]);
statusView.setText(String.format("Completed %d", arg0[0]));
return;
}
protected void onPreExecute(Void... unused) {
completed = 0;
progressBar.setProgress(completed);
return;
}
protected Void doInBackground(Void... unused) {
int l;
for (int i=0; i < 100; ++i) {
for (int n=0; n < 500; ++n) {
for (int j=0; j <5000; ++j) {
l = n*j*i;
}
}
completed++;
publishProgress(completed);
}
return null;
}
这是主UI线程的执行:
new workerThread().execute();
有什么想法吗?感谢。
答案 0 :(得分:1)
这是文档给出的AsyncTask基本结构。
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
这与你的唯一区别在于AsyncTask类的内部函数所期望的参数与你声明的参数之间的不匹配。
您声明了protected void onProgressUpdate(int... arg0)
,但您的班级希望获得Integer
值,而不是基本类型int
。
尝试更改它并再次运行。
问候!