sql >> Base de Datos >  >> RDS >> SQLite

Android:intente volver a abrir un objeto ya cerrado:SQLiteQuery usando loaderManager

Su código es un poco difícil de entender debido a un formato deficiente.

De todos modos, la respuesta proporcionada en realidad no es una solución. El cursor devuelto en onLoadFinished se debe garantizar que no se cerrará, por lo que está cargando el cursor de manera incorrecta. Específicamente, cuando llamas

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

Realmente no entiendo lo que sucede aquí, pero entiendo que deberías hacer otra cosa. Simplemente almacene el filtro de consulta en un campo dentro de su Fragment y ejecute getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this); . Tenga en cuenta que ejecuta restartLoader , y no initLoader , porque tiene datos diferentes que desea consultar.

En tu onCreateLoader , debe usar el filtro que almacenó como una variable de instancia para la selection .

Algunos antecedentes

initLoader carga los datos que se cargaron en la última ejecución, si se habían ejecutado antes. Esta es la razón por la que llama al método de inicialización de su Fragmento/Actividad. Esto es útil porque no tendrá que volver a consultar sobre el cambio de orientación.

restartLoader limpia los datos cargados previamente para que obtenga un nuevo Loader para trabajar con (probablemente) datos diferentes.

Si todavía no está seguro de lo que está haciendo, asegúrese de leer este artículo, que es un muy buen artículo de introducción a los cargadores con un código de muestra que se parece mucho a lo que desea lograr. Los cargadores son bastante enigmáticos al principio, pero una vez que le coges el tranquillo, todo va viento en popa.