Значит, этот пустой указатель меня смущает. Я считаю, что это проблема с областью.
Моя основная деятельность выглядит следующим образом:
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();
THEN внутри progressThread
, который является отдельным классом, я делаю
mHandler.sendMessage(mHandler.obtainMessage());
Теперь до этого момента я считаю, что он ведет себя так, как должен. У меня есть мой обработчик, висящий в классе, прямо под моим oncreate
final Handler handler = new Handler() {
public void handleMessage(Message msg){
progressDialog.hide();
progressThread.interrupt();
}
};
Программа думает, что progressDialog и progressThread объявлены, но имеют значение null. Почему они должны быть пустыми, если я создаю экземпляр в своем oncreate.
ProgressDialog progressDialog = new ProgressDialog(this);
и
ProgressThread progressThread = new ProgressThread(handler,mImageIds,mImages);
объявляют локальные переменные. Измените их так:
progressDialog = new ProgressDialog(this);
progressThread = new ProgressThread(handler,mImageIds,mImages);
Спасибо Яну! Я действительно пошел вперед и переопределил AsyncTask. Он намного чище и на самом деле работает лучше, чем раньше. Теперь мне просто нужно реализовать progressdialog с ним.
Прежде чем начать отлаживать это, я бы предложил вместо AsyncTask. Он был создан для рабочих потоков, которые должны сообщать о прогрессе в потоке пользовательского интерфейса.