sql >> Databasteknik >  >> RDS >> SQLite

Android - försök att öppna ett redan stängt objekt igen:SQLiteQuery med loaderManager

Din kod är lite svår att förstå på grund av dålig formatering.

Hur som helst, det angivna svaret är faktiskt inte en fix. Markören återvände till onLoadFinished bör garanterat inte vara stängd, så du laddar markören på fel sätt. Närmare bestämt när du ringer

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

Jag förstår inte riktigt vad som händer här, men jag förstår att du borde göra något annat. Lagra bara frågefiltret i ett fält i ditt Fragment och kör getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this); . Observera att du kör restartLoader , och inte initLoader , eftersom du har olika data som du vill fråga efter.

I din onCreateLoader , bör du använda filtret som du lagrade som en instansvariabel för selection .

Lite bakgrund

initLoader laddar data som laddades i den senaste körningen, om den hade körts tidigare. Det är därför du kallar in initialiseringsmetoden för ditt Fragment/Aktivitet. Detta är praktiskt eftersom du inte behöver begära orienteringsändring.

restartLoader rensar upp tidigare laddade data så att du får en ny Loader att arbeta med (sannolikt) olika data.

Om du inte är riktigt säker på vad du fortfarande gör, se till att läsa den här artikeln, som är en mycket bra introduktionsartikel om Loaders med exempelkod som liknar det du vill uppnå. Lastare är ganska gåtfulla till en början, men när du väl fått kläm på det går det smidigt.



  1. Oracle - uppdatera join - icke nyckelbevarad tabell

  2. Hur man väljer * men utan kolumnnamn måste vara unika i varje vy

  3. mysql-transaktion - återställ alla undantag

  4. Rätt verktyg gör att trimningen fungerar snabbt