Я получаю спорадическое (1 из ~ 30 раз) исключение NullPointerException в этой строке кода. и я понятия не имею, откуда это берется и как это предотвратить.
public void close() {
if (mDb!=null)
mDb.close();
}
mDb — это объект SQliteDatabase, а функция Close реализована в классе Helper.
Что я делаю: я хочу обработать сложный запрос в этой базе данных SQliteDatabase с помощью AsyncTask. Вот код AsyncTask:
private class processCursorTask extends AsyncTask<Integer[], Void, Dataset[]> {
private DbHelper mDb;
processCursorTask(DbHelper db) {
super();
mDb=db;
}
@Override
protected Dataset[] doInBackground(Integer... args) {
Dataset[] res=mDb.getCursorFiltered(args);
mDb.close();
return res;
}
protected void onPostExecute(Dataset[] result) {
setListView(result);
}
}
И я создаю эту AsyncTask здесь (из ListFragment):
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
new processCursorTask(new DbHelper(this.getActivity()), mBaseDivision, mBaseValue, mSortOrder, mSortDir).execute();
}
Не совсем понятно, к какому классу принадлежит ваш метод
выше. В любом случае вы звонитеpublic void close() { if (mDb!=null) mDb.close(); }
дважды: один раз вprivate class processCursorTask extends AsyncTask<Integer[], Void, Dataset[]> { private DbHelper mDb; processCursorTask(DbHelper db) { super(); mDb=db; } @Override protected Dataset[] doInBackground(Integer... args) { Dataset[] res=mDb.getCursorFiltered(args); mDb.close(); return res; } protected void onPostExecute(Dataset[] result) { setListView(result); } }
и один раз в _4_.@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); new processCursorTask(new DbHelper(this.getActivity()), mBaseDivision, mBaseValue, mSortOrder, mSortDir).execute(); }