Как закрыть базу данных в Cursorloader

#android-cursorloader

#android-cursorloader

Вопрос:

В настоящее время я работаю над ListViews фрагментами. Просмотр списка загружается с помощью Cursorloader, но без ContentManager. Итак, код выглядит так, и он работает:

 @Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {

    Log.d("SoapERP", "onCreateLoader");
    CursorLoader loader = new CursorLoader(getActivity()) {
    final DBHelper dbhelper1= new DBHelper(getActivity());       
        @Override
        public Cursor loadInBackground() {
            Cursor c = null;
            dbhelper1.open();
            c = dbhelper1.fetchAllMatnameswithID();
//              dbhelper1.close();
            return c;

        }

     };
    return loader;
  

Моя проблема в том, что я получаю сообщение LogCat-Error-о том, что база данных не была закрыта. Но если я использую dbhelper.close(); Я получаю сообщение об ошибке «База данных уже закрыта», что также понятно, потому что оно находится непосредственно перед оператором return . После того, как код оператора return недоступен, и если я объявляю DBHelper dbhelper1 final, программа завершает работу без какой-либо информации в logcat. Итак, в чем моя ошибка???

Комментарии:

1. Чтобы предотвратить ошибку, я попытался сделать это с помощью контент-провайдера, но проблема все та же. Но я думаю, что теперь я немного ближе к проблемным потокам. Я закрываю базу данных, пока другой поток все еще собирает данные. Теперь мне совершенно непонятно, как найти правильное решение для этого.

Ответ №1:

Наконец, я нашел здесь правильное утверждение от Дайанн Хакборн из Android framework development: «Поставщик контента создается при создании процесса его размещения и остается до тех пор, пока процесс выполняется, поэтому нет необходимости закрывать базу данных — она будет закрыта как часть очистки ядраувеличьте ресурсы процесса, когда процесс будет остановлен. Дайанн Хакборн Инженер фреймворка Android hack…@android.com » — так что давайте воспользуемся контент-провайдером.