Ahoj, mám začátečnický dotaz k SQLite Cursorům, když jsou použité ve vlastním Adapteru v ListFragmentu. Vycházel jsem původně ze seriálu na Zdrojáku, prohledal jsem kupu příspěvků na stackoverflow.com i jinde, ale výsledek se nedostavil.
Problém je, že ať dělám co dělám, tak mi při testování v emulátoru při otáčení obrazovky vyhazuje do logu výjimku, že nemám uzavřený cursor. Aplikace je rozložená zhruba takto:
Třída s modelem, kde je vnitřní třída SQLiteOpenHelper a dále metody pro zpracování, mimo jiné getRecords, která vrací Cursor. Dále mám třídu s ListFragmentem, která je posléze vložena do hlavní activity. V této třídě mám metodu updateList:
public void updateList() {
Context ctx = getActivity();
this.c = this.model.getRecords();
TachoListAdapter adapter = new TachoListAdapter(ctx, this.c, 0);
setListAdapter(adapter);
//this.model.close();
}
model.close() zavírá databázi. No a právě když otáčím obrazovku (nebo i v jiných případech, kdy dojde ke "zničení") mi to vyhazuje výjimku do logu (ale aplikaci to neshodí), že není uzavřen Cursor.
Zkoušel jsem dát tedy this.c.close() před model.close(), ale to nepomohlo. Pak jsem to zkusil dát do onPause() fragmentu. To bohužel taky nepomohlo. Taky mi občas vyhodil výjimku, že zavírám Cursor, který je již zavřený, tak jsem to upravil takto:
public void onPause() {
super.onPause();
if (!this.c.isClosed()) {
this.c.close();
}
//this.model.close();
}
Jenže i přesto mi tu výjimku se zavřeným Cursorem vyhazoval. Zkoušel jsem dát volání super.onPause() u za to volání uzavření cursoru, zkoušel jsem různě přesunovat zavírání modelu, ale nic.
Už tu nad tím laboruju 2 dny, ale nepodařilo se mi to vyřešit :( Můžete mi prosím někdo poradit, jak tedy správně používat databázi a kurzory ve Fragmentech (konkrétně v tom FragmentList). Já měl za to, že uzavření toho kurzoru v onPause() by mělo fungovat, ostatně tohle jsem našel i v mnoha příspěvcích na netu, ale tam to bylo vždycky v Aktivitě.
Díky za pomoc.