Android线程处理程序NullPointerException

时间:2010-12-19 15:53:58

标签: android multithreading

所以这个空指针让我感到困惑。我认为这是一个范围问题。

我的主要活动如下:

public class App extends Activity {  
  ProgressDialog progressDialog;  
  ProgressThread progressThread;

然后在oncreate里面我这样做:

  ProgressDialog progressDialog = new ProgressDialog(this);  
  progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);  
  progressDialog.setMessage("Fetching Images...");  
  ProgressThread progressThread = new ProgressThread(handler,mImageIds,mImages);  
  progressThread.start();    
  progressDialog.show();

然后在progressThread里面,这是我做的一个单独的课程

mHandler.sendMessage(mHandler.obtainMessage());

现在直到这一点,我相信它的行为应该如此。我的处理程序在我的oncreate

下面的类范围内挂起
final Handler handler = new Handler() {  
  public void handleMessage(Message msg){  
    progressDialog.hide();  
    progressThread.interrupt();  
  }  
 };

程序认为progressDialog和progressThread已声明,但为null。如果我在我的oncreate中实例化,为什么它们会为null。

3 个答案:

答案 0 :(得分:1)

ProgressDialog progressDialog = new ProgressDialog(this);

ProgressThread progressThread = new ProgressThread(handler,mImageIds,mImages);

都声明了局部变量。将它们改为:

progressDialog = new ProgressDialog(this);
progressThread = new ProgressThread(handler,mImageIds,mImages);

答案 1 :(得分:0)

在开始调试之前,我建议改用AsyncTask。它是为需要报告UI线程进度的工作线程创建的。

答案 2 :(得分:0)

谢谢伊恩!我实际上继续使用AsyncTask重新实现。它更清洁,实际上比以前更好。现在我只需要用它来实现progressdialog。