Android Query & managedQuery

今天说一下以下两种方式query数据:

 

 

 

Java代码   收藏代码
  1. Cursor c1 = mContext.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);  
  2.   
  3. Cursor c2 = mActivity.managedQuery(uri, projection, selection, sortOrder);  

 

 

 

使用方法一:若将Cursor c1数据放入Adapter 中,如getView() 调用加载数据,需在此Adapter对应Activity生命周期中,对Cursor进行控制,尤其要注意c1.close()的处理,否则会在反复出现如下Exception.

 

Java代码   收藏代码
  1. E/Cursor  ( 1384): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/xx/databases/xx.db, table = xx, query = SELECT xx  
  2. E/Cursor  ( 1384): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here  
  3. E/Cursor  ( 1384):  at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210)  
  4. E/Cursor  ( 1384):  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)  
  5. E/Cursor  ( 1384):  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)  
  6. E/Cursor  ( 1384):  at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229)  
  7. E/Cursor  ( 1384):  at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)  
  8. E/Cursor  ( 1384):  at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1301)  

 使用方法二:Cursor c2 会随着Activity生命周期的变化,让Activity去控制c2的生命周期,所以不用太但心cursor是否被close,是否requery.



参考:http://consuela-zhao.iteye.com/blog/961617

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值