SQLite
 sql >> база данни >  >> RDS >> SQLite

Android - опитайте се да отворите отново вече затворен обект:SQLiteQuery с помощта на loaderManager

Вашият код е малко труден за разбиране поради лошо форматиране.

Както и да е, предоставеният отговор всъщност не е решение. Курсорът се върна в onLoadFinished трябва да се гарантира, че няма да бъде затворен, така че зареждате курсора си по грешен начин. По-конкретно, когато се обадите

adapter.getFilter().filter(s.toString());

Наистина не разбирам какво става тук, но разбирам, че трябва да направите нещо друго. Просто съхранете филтъра на заявката в поле във вашия Fragment и стартирайте getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this); . Имайте предвид, че стартирате restartLoader , а не initLoader , защото имате различни данни, за които искате да поискате.

Във вашия onCreateLoader , трябва да използвате филтъра, който сте съхранили като променлива на екземпляра за selection .

Малък фон

initLoader зарежда данните, които са били заредени при последното изпълнение, ако са се изпълнявали преди. Ето защо извиквате метода за инициализация на вашия фрагмент/активност. Това е удобно, защото няма да ви се налага да правите заявка за промяна на ориентацията.

restartLoader почиства предварително заредените данни, така че да получите нов Loader за работа с (вероятно) различни данни.

Ако все още не сте сигурни какво правите, не забравяйте да прочетете тази статия, която е много добра уводна статия за Loaders с примерен код, който много прилича на това, което искате да постигнете. Товарачите в началото са доста загадъчни, но след като се овладеете, става плавно.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да комбинирам данни от две отделни таблици в един курсор?

  2. Индекс на SQLite

  3. Индекс, базиран на SQLite Expression

  4. Форматирайте числа със запетая в SQLite

  5. SQLite - JOIN изявления