0

在我的主要活动中,我有一个线程正在做很多事情,包括向数据库添加一些记录。在从主活动继承的第二个活动中,我想对我的数据库进行查询。但是我需要检查 Main Activity 中的第一个线程是否完成,到目前为止我所做的是:

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

您可以ThreadgetFromDatabase()方法中的 设为静态类级别变量,在您的 中为它编写一个静态 get 方法,并在您的 child 中Activity检查。isAlive()Activity

于 2012-08-08T12:48:18.010 回答
1

简单地使用一个信号量变量,一旦它达到某个状态,你就可以从线程中修改它?

于 2012-08-08T13:10:44.600 回答