#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 » — так что давайте воспользуемся контент-провайдером.