1

我正在尝试在我的应用程序中显示进度条,但遇到了线程问题。这是我用来执行此操作的代码:

package com.integrated.mpr;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

public class Progess extends Activity {

   static String[] display = new String[Choose.n];
   private static final int Progress = 0;

   ProgressBar bar;
   TextView label;
   Handler handler = new Handler();

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      // TODO Auto-generated method stub
      super.onCreate(savedInstanceState);
      setContentView(R.layout.progress);

      bar = (ProgressBar) findViewById(R.id.progBar);

      new Thread(new Runnable() {

         int i = 0;
         int progressStatus = 0;

         public void run() {
            while (progressStatus < 100) {
               progressStatus += doWork();
               try {
                  Thread.sleep(500);
               } catch (InterruptedException e) {
                  e.printStackTrace();
               }

               // Update the progress bar
               handler.post(new Runnable() {
                  public void run() {
                     bar.setProgress(progressStatus);
                     i++;
                  }
               });
            }
         }

         private int doWork() {
            display = new Logic().finaldata();
            return i * 3;
         }

      }).start();

      Intent openList = new Intent("com.integrated.mpr.SENSITIVELIST");
      startActivity(openList);
   }
}

我收到以下 logcat 消息:

05-30 12:38:00.082: E/AndroidRuntime(17332): java.lang.RuntimeException: 无法在未调用 Looper.prepare() 的线程内创建处理程序

请帮助我,我是线程新手。

4

3 回答 3

4

与其以这种方式实现线程,我建议您实现AsyncTask ,它在 Android中被称为Painless Threading 。

  1. 在里面显示进度条onPreExecute()
  2. 在里面做后台任务doInBackground()
  3. 关闭里面的进度条onPostExecute()
  4. 更新进度条里面onProgressUpdate()
于 2012-05-30T07:28:27.827 回答
0

我认为答案在您问题的错误消息中-请在Looper.prepare()之前写handler.post(new Runnable() ...)

以下是一些参考资料:

于 2012-05-30T07:29:58.650 回答
0

为了快速,请尝试下面的代码。

runOnUiThread(new Runnable(){
    @Override
    public void run() {
        bar.setProgress(progressStatus);
        i++;

    }  
}
于 2012-05-30T07:30:58.667 回答