Android Query & managedQuery

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

 

 

 

Cursor c1 = mContext.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);

Cursor c2 = mActivity.managedQuery(uri, projection, selection, sortOrder);

 

 

 

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

 

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
E/Cursor  ( 1384): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
E/Cursor  ( 1384): 	at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210)
E/Cursor  ( 1384): 	at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
E/Cursor  ( 1384): 	at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
E/Cursor  ( 1384): 	at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229)
E/Cursor  ( 1384): 	at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)
E/Cursor  ( 1384): 	at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1301)

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

 

 

原文引用:

Making the query

To query a content provider, you can use either the ContentResolver.query() method or the Activity.managedQuery() method. Both methods take the same set of arguments, and both return a Cursor object. However, managedQuery() causes the activity to manage the life cycle of the Cursor. A managed Cursor handles all of the niceties, such as unloading itself when the activity pauses, and requerying itself when the activity restarts. You can ask an Activity to begin managing an unmanaged Cursor object for you by calling Activity.startManagingCursor().




以上

20110314

Consuela.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值