0

メイン アクティビティには、データベースへのレコードの追加など、多くのことを行うスレッドがあります。メイン アクティビティから継承する 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();
    }

履歴アクティビティからデータベースにクエリを実行する前に、最初のスレッドがすべての作業を完了していることを確認するにはどうすればよいですか?

4

2 に答える 2

1

Threadメソッド内getFromDatabase()の を静的クラス レベル変数にし、そのための静的な get メソッドを に記述し、 child 内Activityでチェックすることができます。isAlive()Activity

于 2012-08-08T12:48:18.010 に答える
1

特定の状態に達したら、スレッドから変更するセマフォ変数を単純に使用するのはどうですか?

于 2012-08-08T13:10:44.600 に答える