`
consuela.zhao
  • 浏览: 23788 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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.

 

分享到:
评论
1 楼 rayleeya 2011-03-23  
好,楼主讲的太好了~
第一次见到这么好的帖子

相关推荐

    android获取相册图片和路径的实现方法

    然而,从Android 4.4开始,`managedQuery()`已被废弃,取而代之的是`getContentResolver().query()`。同时,为了兼容新旧API,我们可以根据设备的Android版本选择使用`ACTION_GET_CONTENT`或`ACTION_OPEN_DOCUMENT`...

    Android开发问题集锦第三期

    在Android中,`managedQuery`和`query`都是用于查询数据库的方法,但它们存在一定的区别。 **1. managedQuery与query的不同** - **managedQuery**:这是一个由`Activity`类提供的方法,用于查询内容提供者(Content...

    基于Android ContentProvider的总结详解

    - **数据查询**:通过调用`managedQuery()`或`query()`方法,可以执行对ContentProvider的查询操作。例如: ```java Cursor cur = managedQuery(person, null, null, null); ``` 游标`cur`包含了查询结果,通过...

    android中Content Proviter的使用方法总结

    查询操作通常通过 `ContentResolver.query()` 或 `Activity.managedQuery()` 方法执行。后者除了返回 `Cursor` 对象外,还会自动管理 `Cursor` 的生命周期,例如在 Activity 暂停或销毁时关闭 `Cursor`,以防止资源...

    Android基础ContentProviderPPT学习教案.pptx

    此外,Activity的managedQuery()方法可以自动管理Cursor的生命周期,简化开发者的工作。 五、处理查询结果 在得到Cursor后,通过移动游标并使用getColumnIndex()方法获取指定列的索引,然后使用getString()等方法...

    android实现Uri获取真实路径转换成File的方法

    在Android开发中,有时我们需要从Uri获取到真实的文件路径,并将其转换为File对象,以便进行文件操作,如读取、写入或删除等。这里我们将深入探讨如何在Android中实现这个过程。 首先,Uri(Uniform Resource ...

    Android基础ContentProvider学习教案.pptx

    ### Android基础ContentProvider详解 #### 一、ContentProvider概述 ContentProvider是Android四大组件之一,主要功能在于实现不同应用程序间的数据共享与交换。在Android系统中,为了保证数据的安全性和私密性,...

    androidSIM

    // Run query Uri uri = Uri.parse("content://icc/adn"); String[] projection = new String[]{"name", "phone"}; String selection = null; String[] selectionArgs = null; String sortOrder = "name" + ...

    Content Provider

    Cursor cursor = getContentResolver().query(uri, null, null, null, null); // 查询联系人信息并按名字升序排序 String[] projection = new String[] { People._ID, People._COUNT, People.NAME, People....

    android在异步任务中关闭Cursor的代码方法

    cursor = mContext.getContentResolver().query(uri, null, null, null, null); if (cursor != null) { cursor.moveToFirst(); // do something } } catch (Exception e) { e.printStackTrace(); } finally { ...

Global site tag (gtag.js) - Google Analytics