我有一个自动补全的控件 (AutoCompleteTextView)链接了CursorAdapter, 
 所以每次输入文字都会查询数据库,  则CursorAdapter里面一直在使用cursor和
SQLiteDatabase sqlite = context.openOrCreateDatabase(DATABASE, 0, null);  
比如  @Override
public Cursor runQueryOnBackgroundThread(CharSequence constraint) {

Cursor c = sqlite.query("table_location", columns, selection, null, null, null,
"cityName asc, countryName asc");

return c;//这个地方会返回给其他地方使用,所以关闭是不正确的
} 所以我想请问什么时候才能关闭数据库?  目前程序一直在报异常"database not closed".

解决方案 »

  1.   

    得看你怎么安排的这个cursor,如果只是一个函数里用,那就在函数结束时关掉,如果很多地方都用,那就作为成员变量。
    当然,假如只是为了获取一些数据,那大可在cursor操作完毕,将数据保存下来,不一定非要把整个cursor都放回出去,也许你为了方便才这样做,但是实际上是不对的;就好比c里,在一个函数中你malloc了东西,然后把malloc返回的指针给return到外面了,外面是方便了,但是你搞不好就忘了,那就泄露了。
      

  2.   

    对,道理是这样的.但是关键是这个CursorAdapter不受我的控制,  他里面实现的大多数方法都需要返回一个Cursor对象,所以我没地方去关闭它.    特别是runQueryOnBackgroundThread()这个函数,每次我输入字段 他都会被调用,并且返回一个Cursor.
    我实在找不到一个地方去关闭他.
      

  3.   

    定义成成员变量,在ondestroy()方法里关掉
      

  4.   

    楼上说的对就在ondestroy()方法里面关闭.