在我的主要活动中,我有一个线程正在做很多事情,包括向数据库添加一些记录。在从主活动继承的第二个活动中,我想对我的数据库进行查询。但是我需要检查 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();
}
在我从历史活动中查询数据库之前,如何确保第一个线程已完成所有工作?