我有一个问题,我不知道如何解决它。我的应用程序中的一个活动有多个AsyncTask
s 访问单个SQLiteOpenHelper
. 我初始化并打开助手,onCreate()
然后将其关闭onStop()
。我还检查它是否已在onResume()
.
自从我发布了我的应用程序以来doInBackground
,我在尝试访问 DB 帮助程序时收到了许多带有 Null Exception 的错误。我知道这是因为数据库在被调用onStop()
之前关闭(),这很公平。doInBackground
我的问题是,我应该在哪里关闭数据库连接?在 Activity 中使用 DB 助手的单个实例并从多个线程()访问它是否正确AsyncTasks
?或者我应该为每个使用单独的数据库助手实例AsyncTask
?
这是我的活动的简化骨架:
public class MyActivity extends Activity{
private DbHelper mDbHelper;
private ArrayList<ExampleObject> objects;
@Override
public void onStop(){
super.onStop();
if(mDbHelper != null){
mDbHelper.close();
mDbHelper = null;
}
}
@Override
public void onResume(){
super.onResume();
if(mDbHelper == null){
mDbHelper = new DbHelper(this);
mDbHelper.open();
}
}
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
DbHelper mDbHelper = new DbHelper(this);
mDbHelper.open();
}
private class DoSomething extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... arg0) {
objects = mDbHelper.getMyExampleObjects();
return null;
}
@Override
protected void onPostExecute(final Void unused){
//update UI with my objects
}
}
private class DoSomethingElse extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... arg0) {
objects = mDbHelper.getSortedObjects();
return null;
}
@Override
protected void onPostExecute(final Void unused){
//update UI with my objects
}
}
}