2

我想用 asy 任务在我的代码中添加一个简单的进程栏。我尝试了一些示例,但看不到该进程栏正常工作。我在这里发布我的代码希望你能帮助我。当我的一些代码完成时,我想停止进程栏,比如使用一些标志来停止散文栏。请发布一些代码。

多谢!

这是我的代码:

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;



    }
}
4

2 回答 2

1

您的doInBackground方法需要调用publishProgress()才能更新 UI。

在行后waited += 100;添加:

int progress = Math.round((float)waited / 3000 * 100);
publishProgress(progress);

AsyncTask此外,如果您打算使用整数来反映您的进度,则 的签名是错误的。通用参数是AsyncTask<Params, Progress, Result>,因此在您的情况下,您不接受任何参数,或从 中返回任何有意义的值doInBackground,但是,您确实希望返回 anInteger以指示进度。因此,更改您的类声明以匹配:

private class loading extends AsyncTask<Void, Integer, Integer>
{
    //your implementation
}
于 2012-07-20T14:23:45.410 回答
0

您没有调用AsyncTask.publishProgress,这就是为什么您的onProgressUpdate方法永远不会被调用的原因。

顺便说一句,您的类名loading违反了命名约定,这不是一个好习惯。

于 2012-07-20T14:24:57.750 回答