sql >> Databáze >  >> RDS >> SQLite

Android – pokuste se znovu otevřít již uzavřený objekt:SQLiteQuery pomocí loaderManager

Váš kód je trochu obtížně pochopitelný kvůli špatnému formátování.

Každopádně poskytnutá odpověď ve skutečnosti není oprava. Kurzor se vrátil na onLoadFinished by mělo být zaručeno, že nebude zavřený, takže kurzor načítáte nesprávným způsobem. Konkrétně když zavoláte

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

Moc nerozumím tomu, co se tu děje, ale chápu, že byste měli udělat něco jiného. Stačí uložit filtr dotazu do pole ve vašem Fragment a spusťte getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this); . Všimněte si, že spustíte restartLoader a ne initLoader , protože máte jiná data, na která se chcete dotazovat.

Ve vašem onCreateLoader , měli byste použít filtr, který jste uložili jako proměnnou instance pro selection .

Nějaké pozadí

initLoader načte data, která byla načtena při posledním spuštění, pokud byla spuštěna dříve. To je důvod, proč zavoláte inicializační metodu vašeho Fragmentu/Aktivity. To je užitečné, protože se nebudete muset znovu dotazovat na změnu orientace.

restartLoader vyčistí dříve načtená data, takže získáte nový Loader pracovat s (pravděpodobně) odlišnými daty.

Pokud si nejste opravdu jisti, co stále děláte, přečtěte si tento článek, což je velmi dobrý úvodní článek o Loaderech s ukázkovým kódem, který se velmi podobá tomu, čeho chcete dosáhnout. Nakladače jsou zpočátku docela záhadné, ale jakmile se do toho pustíte, plavba hladce.



  1. Získejte první den v týdnu na serveru SQL

  2. JSON_SET() – Vložení nebo aktualizace hodnot v dokumentu JSON v MySQL

  3. Jak obnovit databázi pomocí Správce zálohování

  4. MariaDB JSON_ARRAYAGG() Vysvětleno