我想用asy任务为我的代码添加一个简单的进程条。我尝试了一些示例,但是看不到进程条的工作。 我在这里发布我的代码希望你能帮助我。 我想停止进程条,当我的一些代码像一些标志一样完成以停止proses栏。 请发布一些代码。
非常感谢!
这里是我的代码:
private class loading extends AsyncTask<Void, Void, Integer> {
Context context;
ProgressBar progressBar;
static final long waitTime = 1 * 4000L;
long preTime;
int progress;
public loading(Context context) {
this.context = context;
progressBar = (ProgressBar) findViewById(R.id.progress_bar);
progressBar.setProgress(0);
}
protected void onPostExecute(Integer result) {
Intent intent = new Intent(this.context, first.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(intent);
finish();
return;
}
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
preTime = System.currentTimeMillis();
}
protected void onProgressUpdate(Integer... values) {
progressBar.setProgress(values[0]);
}
@Override
synchronized protected Integer doInBackground(Void... arg0) {
int waited = 0;
while (waited < 3000) {
try {
// SystemClock.sleep(100);
this.wait(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
waited += 100;
}
return null;
}
}
答案 0 :(得分:1)
您的doInBackground
方法需要调用publishProgress()才能更新用户界面。
在waited += 100;
行之后添加:
int progress = Math.round((float)waited / 3000 * 100);
publishProgress(progress);
此外,如果您打算使用整数来反映您的进度,则AsyncTask
的签名是错误的。通用参数是AsyncTask<Params, Progress, Result>
,因此在您的情况下,您不接受任何参数,或从doInBackground
返回任何有意义的值,但是,您做想要返回Integer
表示进度。因此,更改您的类声明以匹配:
private class loading extends AsyncTask<Void, Integer, Integer>
{
//your implementation
}
答案 1 :(得分:0)
您没有致电AsyncTask.publishProgress,这就是您永远不会调用onProgressUpdate
方法的原因。
顺便说一下,你的班级名loading
破坏了命名惯例,这不是一个好习惯。