メイン アクティビティには、データベースへのレコードの追加など、多くのことを行うスレッドがあります。メイン アクティビティから継承する 2 番目のアクティビティでは、データベースに対してクエリを実行したいと考えています。しかし、メイン アクティビティの最初のスレッドが終了したかどうかを確認する必要があります。これまでに行ったことは次のとおりです。
public class History extends Main {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(!(MainThread.isAlive())) {
getFromDatabase();
}
}
}
これが私のgetFromDatabase()
方法です
pd = ProgressDialog.show(this, "Please Wait",
"Getting cases from database", false);
Thread t = new Thread(this);
t.start();
この実行メソッドを呼び出します:
@Override
public void run() {
ArrayList<Case> c = db1.getAllCases();
Message msg = handler.obtainMessage();
msg.obj = c;
handler.sendMessage(msg);
}
private Handler handler = new Handler() {
@SuppressWarnings("unchecked")
@Override
public void handleMessage(Message m) {
pd.dismiss();
list = (ArrayList<Case>) m.obj;
tempList = getCaseNumberToTempList(list);
tempCaseList = createTempList(list);
lv.setAdapter(new CustomAdapter(History.this, list));
lv.setTextFilterEnabled(true);
}
};
しかし、そうすると、次のコード行でアプリケーションがクラッシュし、次のようになりますNullPointerException
。
if(!(MainThread.isAlive())) {
getFromDatabase();
}
履歴アクティビティからデータベースにクエリを実行する前に、最初のスレッドがすべての作業を完了していることを確認するにはどうすればよいですか?