Как решить это исключение? - PullRequest
0 голосов
/ 01 сентября 2011

Я получаю это исключение, DatabaseObjectNotClosedException:

close() was never explicitly called on database '/data/data/com.project.test/databases/database' 
E/SQLiteDatabase(13921): android.database.sqlite.DatabaseObjectNotClosedException:        
Application did not close the cursor or database object that was opened here

Я попытался закрыть помощник и курсоры базы данных, но я получу исключение во время выполнения. Это происходит, когда я покидаю занятие и возвращаюсь к нему после нажатия кнопки «Назад».

Как правильно закрыть курсоры и помощники?

Я пробовал два метода:

сначала закрывая курсоры после каждого отдельного использования и закрывая паузу помощника базы данных.

во-вторых, закрывая курсоры на паузе вместе с помощником базы данных, но оба не работали.

Может ли кто-нибудь помочь мне с этим?

EDIT:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    activity = this.getActivity();
    context = this.getActivity().getApplicationContext();
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mDbHelper = new DatabaseHelper(context);
    mDbHelper.open();
    populateList();
}

public void populateList() {
    directoryCursor = mDbHelper.fetchAllRootDirectories();
    activity.startManagingCursor(directoryCursor);

    adapter = new DirectoryListAdapter(this.getActivity(), directoryCursor);
    this.setListAdapter(adapter);
}

                 ......


private UpdateDatabaseListener updateDatabaseListener = new UpdateDatabaseListener() {

    public void onUpdate(int from, int to) {

                .....

        findExistingRecordCursor = mDbHelper.findExistingRecords(from, to);
        activity.startManagingCursor(findExistingRecordCursor);
        if(findExistingRecordCursor.getCount() == 0) {

              ....

          }

  }
}

У меня открыт помощник по базе данных в функции onCreate (). курсоры, используемые при заполнении списка, курсоры, используемые для поиска существующих записей, курсоры для получения информации.


UPDATE:

Я попытался закрыть onPause и onDestroy, он все еще вылетает с исключением времени выполнения.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2011

Извините за поздний ответ.Из того, что я вижу, вы открыли базу данных с помощью mDbHelpher.open (). После этого вы сделали populatelist (). Попытались ли вы после этого выполнить mDbHelpher.close ()?

То же самое с курсорами.Потому что ваша ошибка ясно говорит о том, что БД или курсор оставлен открытым.Как только вы закончите использовать базу данных, вы должны закрыть.Это не должно создавать проблемы даже после того, как вы зайдете в другое занятие и нажмете кнопку «назад».

Также вы сказали, что получаете исключение во время выполнения при закрытии БД или курсора.Это одно и то же исключение или другое?

0 голосов
/ 01 сентября 2011

Вы закрываете объект SQLiteDatabase или нет. Если нет, попробуйте закрыть объект SQLiteDatabase, как этот

  1. SQLiteDatabase db = SQLiteHelper classobject.getWriteableDatabase ();

  2. // блок кода

  3. db.close ();

и запустите ваше приложение.

Не могли бы вы опубликовать свой код, чтобы вам было легче понять вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...