sql >> Database >  >> RDS >> SQLite

Android - probeer een reeds gesloten object opnieuw te openen:SQLiteQuery met loaderManager

Je code is een beetje moeilijk te begrijpen vanwege een slechte opmaak.

Hoe dan ook, het geleverde antwoord is eigenlijk geen oplossing. De cursor keerde terug op onLoadFinished moet gegarandeerd niet worden gesloten, dus u laadt uw cursor op de verkeerde manier. In het bijzonder, wanneer u belt

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

Ik begrijp niet echt wat hier gebeurt, maar ik begrijp wel dat je iets anders moet doen. Sla het zoekfilter gewoon op in een veld in uw Fragment en voer getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this); uit . Merk op dat u restartLoader . uitvoert , en niet initLoader , omdat u verschillende gegevens heeft waarnaar u wilt opvragen.

In uw onCreateLoader , moet u het filter gebruiken dat u hebt opgeslagen als instantievariabele voor de selection .

Wat achtergrond

initLoader laadt de gegevens die in de laatste run zijn geladen, als deze eerder was uitgevoerd. Daarom schakel je de initialisatiemethode van je Fragment/Activiteit in. Dit is handig omdat u bij het wijzigen van de richting niet opnieuw hoeft te vragen.

restartLoader ruimt eerder geladen gegevens op zodat u een nieuwe Loader . krijgt om met (waarschijnlijk) verschillende gegevens te werken.

Als je nog niet echt zeker weet wat je aan het doen bent, lees dan dit artikel, dat een zeer goed inleidend artikel is over Loaders met voorbeeldcode die erg lijkt op wat je wilt bereiken. Laders zijn in het begin behoorlijk raadselachtig, maar als je het eenmaal onder de knie hebt, gaat het van een leien dakje.



  1. Kan niet bulksgewijs laden. Besturingssysteem foutcode 5 (Toegang is geweigerd.)

  2. Recursieve zoekopdracht gebruikt voor transitieve afsluiting

  3. Een manier om te controleren of Oracle klaar is met sql

  4. GreenDAO ondersteunt meerdere relaties tussen tabellen