У меня есть проблема, и я не знаю, как к ней подойти. Активность в моем приложении имеет несколько AsyncTask
с доступом к одному SQLiteOpenHelper
. Я инициализирую и открываю помощник в onCreate()
и закрываю его в onStop()
. Я также проверяю, было ли оно инициализировано в onResume()
.
С тех пор как я опубликовал свое приложение, в doInBackground
я получил ряд ошибок с Null Exception, когда я пытаюсь получить доступ к помощнику БД. Я знаю, что это происходит потому, что БД закрыта (onStop()
) как раз перед вызовом doInBackground
, достаточно справедливо.
Мой вопрос: где мне закрыть соединение с БД? Правильно ли использовать один экземпляр помощника БД в Activity и обращаться к нему из нескольких потоков (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
}
}
}