sql >> Database teknologi >  >> RDS >> SQLite

Android - forsøg at genåbne et allerede lukket objekt:SQLiteQuery ved hjælp af loaderManager

Din kode er lidt svær at forstå på grund af dårlig formatering.

Under alle omstændigheder er det leverede svar faktisk ikke en rettelse. Markøren returnerede til onLoadFinished bør garanteret ikke lukkes, så du indlæser din markør på den forkerte måde. Specifikt når du ringer

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

Jeg forstår ikke rigtig, hvad der foregår her, men jeg forstår, at du burde gøre noget andet. Gem blot forespørgselsfilteret i et felt i dit Fragment og kør getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this); . Bemærk, at du kører restartLoader , og ikke initLoader , fordi du har forskellige data, som du vil forespørge efter.

I din onCreateLoader , skal du bruge det filter, du har gemt som en instansvariabel til selection .

Noget baggrund

initLoader indlæser de data, der blev indlæst i den sidste kørsel, hvis de havde kørt før. Det er derfor, du kalder ind i initialiseringsmetoden for dit fragment/aktivitet. Dette er praktisk, fordi du ikke behøver at forespørge om retningsændring.

restartLoader rydder op i tidligere indlæste data, så du får en ny Loader at arbejde med (sandsynligvis) forskellige data.

Hvis du ikke er rigtig sikker på, hvad du stadig laver, så sørg for at læse denne artikel, som er en meget god introduktionsartikel om Loaders med eksempelkode, der ligner meget det, du vil opnå. Læssere er temmelig gådefulde i starten, men når du først har fået styr på det, sejler det glat.



  1. Overvågning af dine databaser med MySQL Enterprise Monitor

  2. Hvordan bestemmer man antallet af dage i en måned i SQL Server?

  3. Forskellen mellem en bruger og et skema i Oracle?

  4. Sådan fungerer TIMESTAMPDIFF() i MariaDB