我正在使用AsyncTask
执行某些工作,我需要进度更新,但我不知道如何在此处获取进度更新。 dowork()
可以执行任何任务,我需要对工作进行更新。谢谢您的帮助!
class MyTask extends AsyncTask<Integer, Integer, String> {
@Override
protected void doInBackground(Integer... params) {
dowork();
//how to return integer value of the progress here?
}
@Override
protected void onPostExecute(String result) {
txt.setText("done");
}
@Override
protected void onPreExecute() {
txt.setText("Starting...");
}
@Override
protected void onProgressUpdate(Integer... values) {
txt.setText("completed..."+ values[0]+"%");
}
}
答案 0 :(得分:2)
您可以像这样发布进度:
publishProgress(yourStatus);
将其写入doInBackground方法。你的onProgressUpdate似乎很好。
要从doWork方法调用publishProgress,您可以添加一个类似的抽象类:
public abstract class UpdateResult {
public abstract void updateStatus(Integer status);
}
现在您将方法从doWork()更改为doWork(UpdateResult结果)并调用updateStatus方法,如下所示:
void doWork(UpdateResult result) {
.
. some work
.
result.updateStatus(50);
.
.
}
并称之为:
doWork(new UpdateResult(){
@Override
public void updateStatus(Integer status){
publishProgress(status)
}
});
示例(我没有测试过这个):
void doWork(UpdateResult result) {
for (int i = 0; i < 100; i++) {
result.updateStatus(i);
}
}
class MyTask extends AsyncTask<Integer, Integer, String> {
@Override
protected String doInBackground(Integer... params) {
doWork(new UpdateResult(){
@Override
public void updateStatus(Integer status){
publishProgress(status);
}
});
return "Done";
}
@Override
protected void onPostExecute(String result) {
txt.setText(result);
}
@Override
protected void onPreExecute() {
txt.setText("Starting...");
}
@Override
protected void onProgressUpdate(Integer... values) {
txt.setText("completed..."+ values[0]+"%");
}
}
答案 1 :(得分:0)
您需要调用此方法http://developer.android.com/reference/android/os/AsyncTask.html#publishProgress(Progress...)
答案 2 :(得分:0)
你需要使用publishProgress(变量);变量是你的情况下的Integer对象。
答案 3 :(得分:0)
您可以使用publishProgress (Progress... values)
在doInBackground
中发布值,这会调用onProgressUpdate
方法