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

Popular posts from this blog

javascript - RequestAnimationFrame not working when exiting fullscreen switching space on Safari -

jsf - How to ajax update an item in the footer of a PrimeFaces dataTable? -

jquery - Keeping Kendo Datepicker in min/max range -