android - Error, bur can't close cursor / database -
i keep getting error "databaseobjectnotclosedexception: application did not close cursor or database object opened here", can't find cursor / database is't closed.
can please tell me forgot close something?
i'm working custom adapter:
oncreate of mainactivity:
@override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_my); getwindow().addflags(windowmanager.layoutparams.flag_keep_screen_on); gridview = (gridview) findviewbyid(r.id.gridview); db = new databasehelper(this); db.open(); mcursor = db.getallrecords(); mycursoradapter madapter = new mycursoradapter(myactivity.this, mcursor, false); madapter.notifydatasetchanged(); gridview.setadapter(madapter); mcursor.close(); db.close(); } mycursoradapter.java
import android.app.progressdialog; import android.content.contentresolver; import android.content.context; import android.database.cursor; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.os.asynctask; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.cursoradapter; import android.widget.imageview; import android.widget.textview; import java.io.fileinputstream; import java.io.filenotfoundexception; import java.io.ioexception; public class mycursoradapter extends cursoradapter { private final layoutinflater minflater; private contentresolver mcontent; public context ccontext ; public mycursoradapter(context context, cursor c, boolean autorequery) { super(context, c, autorequery); minflater = layoutinflater.from(context); mcontent = context.getcontentresolver(); } imageview iv; @override public view newview(context context, cursor cursor, viewgroup parent) { return minflater.inflate(r.layout.list_item, parent, false); } @override public void bindview(view view, context context, cursor cursor) { string path = cursor.getstring(cursor.getcolumnindex("path")); iv = (imageview) view.findviewbyid(r.id.imageview); new loadimage().execute(path); string username = cursor.getstring(cursor.getcolumnindex("title")); textview usernametv = (textview) view.findviewbyid(r.id.textview); usernametv.settext(username); cursor.close(); } private class loadimage extends asynctask<string, integer, bitmap> { progressdialog dialog; @override protected void onpreexecute() { // example of setting dialog = new progressdialog(ccontext); dialog.setprogressstyle(progressdialog.style_horizontal); dialog.setmax(100); dialog.show(); } @override protected bitmap doinbackground(string... strings) { (int = 0; < 20; i++) { publishprogress(5); try { thread.sleep(88); } catch (interruptedexception e) { e.printstacktrace(); } } dialog.dismiss(); fileinputstream fin; try { fin = ccontext.openfileinput(strings[0]); if(fin !=null && fin.available() > 0) { return bitmapfactory.decodestream(fin); } } catch (filenotfoundexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } return null; } @override protected void onpostexecute(bitmap bitmap) { iv.setimagebitmap(bitmap); } @override protected void onprogressupdate(integer... progress) { dialog.incrementprogressby(progress[0]); } } } to sure, added closestatements in onpause , ondestroy of mainactivity, this:
@override protected void ondestroy() { if (mcursor != null) { mcursor.close(); } if (db != null) { db.close(); } } @override protected void onpause() { if (mcursor != null) { mcursor.close(); } if (db != null) { db.close(); } } the whole error:
06-27 16:29:52.238 879-888/com.android.email e/strictmode﹕ finalizing cursor has not been deactivated or closed. database = /data/data/com.android.email/databases/emailprovider.db, table = null, query = select _id _id,'sw5ib3g' persistentid, 'content://com.android.email.provider/uifolder/' || _id folderuri,displayname name,flags&1 haschildren,'16424' capabilities,3 syncwindow,'content://com.android.email.provider/uimessages/' || _id conversationlisturi, 'content://com.android.email.provider/uisubfolders/' || _id childfolderslisturi,null unseencount,unreadcount unreadcount,case when totalcount<0 or type=3 or type=4 or type=6 messagecount else totalcount end totalcount, 'content://com.android.email.provider/uirefresh/' || _id refreshuri,uisyncstatus syncstatus,uilastsyncresult lastsyncresult,case type when 0 2 when 3 4 when 4 8 when 5 16 when 6 32 when 7 64 when 9 128 when 10 2048 when 8 4097 else 1 end type,case type when 0 2130837570 when 3 2130837566 when 4 2130837574 when 5 2130837578 when 6 2130837586 when 9 2130837582 else -1 end iconresid,null notific android.database.sqlite.databaseobjectnotclosedexception: application did not close cursor or database object opened here @ android.database.sqlite.sqlitecursor.<init>(sqlitecursor.java:98) @ android.database.sqlite.sqlitedirectcursordriver.query(sqlitedirectcursordriver.java:50) @ android.database.sqlite.sqlitedatabase.rawquerywithfactory(sqlitedatabase.java:1314) @ android.database.sqlite.sqlitedatabase.rawquery(sqlitedatabase.java:1253) @ com.android.email.provider.emailprovider.uiquery(emailprovider.java:4302) @ com.android.email.provider.emailprovider.query(emailprovider.java:1212) @ android.content.contentprovider.query(contentprovider.java:857) @ android.content.contentprovider$transport.query(contentprovider.java:200) @ android.content.contentresolver.query(contentresolver.java:461) @ android.content.contentresolver.query(contentresolver.java:404) @ com.android.email.notificationcontroller.refreshnotificationsforaccountinternal(notificationcontroller.java:635) @ com.android.email.notificationcontroller.refreshnotificationsforaccount(notificationcontroller.java:588) @ com.android.email.notificationcontroller.access$1200(notificationcontroller.java:65) @ com.android.email.notificationcontroller$messagecontentobserver.onchange(notificationcontroller.java:705) @ android.database.contentobserver.onchange(contentobserver.java:129) @ android.database.contentobserver$notificationrunnable.run(contentobserver.java:180) @ android.os.handler.handlecallback(handler.java:733) @ android.os.handler.dispatchmessage(handler.java:95) @ android.os.looper.loop(looper.java:136) @ com.android.email.notificationcontroller$notificationthread.run(notificationcontroller.java:792) @ java.lang.thread.run(thread.java:841)
Comments
Post a Comment