源码学习---Activity之managedQuery()

转自:http://www.cnblogs.com/hibraincol/archive/2010/09/27/1837162.html



描述:

获取一个包含指定数据的 Cursor 对象,并由 Activity 来接管这个 Cursor 的生命周期。

首先该函数通过调用 getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder) 获取一个包含指定数据(由 query 方法的参数指定)的 Cursor 对象。

然后通过调用 startManagingCursor(c) 实现由 Activity 来接管返回的 Cursor c 的生命周期。



原型:

[java] view plaincopyprint?
01.public final Cursor managedQuery(Uri uri, 
02.                                 String[] projection, 
03.                                 String selection, 
04.                                 String[] selectionArgs, 
05.                                 String sortOrder) 
06.{ 
07.    Cursor c = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder); 
08.    if (c != null) { 
09.        startManagingCursor(c); 
10.    } 
11.    return c; 
12.} 
public final Cursor managedQuery(Uri uri,
                                 String[] projection,
                                 String selection,
                                 String[] selectionArgs,
                                 String sortOrder)
{
    Cursor c = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
    if (c != null) {
        startManagingCursor(c);
    }
    return c;
}

参数:

uri, 用于 Content Provider 查询的 URI,也就是说从这个 URI 中获取数据。例如:

[java] view plaincopyprint?
01.Uri uri = Contacts.People.CONTENT_URI;   //联系人列表URI。 
Uri uri = Contacts.People.CONTENT_URI;   //联系人列表URI。

projection, 用于标识 uri 中有哪些 columns 需要包含在返回的 Cursor 对象中。例如:

[java] view plaincopyprint?
01.//待查询的  
02.columnsString[] projection = { Contacts.PeopleColumns.NAME, Contacts.PeopleColumns.NOTES };  
//待查询的
columnsString[] projection = { Contacts.PeopleColumns.NAME, Contacts.PeopleColumns.NOTES }; 

selection, 作为查询的过滤参数(过滤出符合 selection 的数据),类似于 SQL 中 Where 语句之后的条件选择。例如:

[java] view plaincopyprint?
01.String selection = Contacts.People.NAME + “=?” //查询条件 
String selection = Contacts.People.NAME + “=?” //查询条件

selectionArgs, 查询条件参数,配合 selection 参数使用。例如:

[c-sharp] view plaincopyprint?
01.String[] selectionArgs = {“Braincol”, “Nixn.dev”};//查询条件参数 
String[] selectionArgs = {“Braincol”, “Nixn.dev”};//查询条件参数

sortOrder,查询结果的排序方式(按查询列( projection 参数中的 columns )中的某个 column )排序)。例如:[c-sharp] view plaincopyprint?01.String sortOrder = Contacts.PeopleColumns.NAME; //查询结果的排序方式(按指定的查询列排序)  String sortOrder = Contacts.PeopleColumns.NAME; //查询结果的排序方式(按指定的查询列排序) 返回值:
一个包含指定数据的 Cursor 对象。

示例:
[c-sharp] view plaincopyprint?01.Uri uri = Contacts.People.CONTENT_URI;  02.String[] projection = { Contacts.PeopleColumns.NAME,  03.        Contacts.PeopleColumns.NOTES };  04.String selection = Contacts.PeopleColumns.NAME + "=?";  05.String[] selectionArgs = { "Braincol","Nixn.dev" };  06.String sortOrder = Contacts.PeopleColumns.NAME;  07.//使用 managedQuery 获取 Contacts.People 这个 ContentProvider 的 Cursor。   08.Cursor cursor = managedQuery(uri, projection, selection, selectionArgs,sortOrder);  Uri uri = Contacts.People.CONTENT_URI;
String[] projection = { Contacts.PeopleColumns.NAME,
        Contacts.PeopleColumns.NOTES };
String selection = Contacts.PeopleColumns.NAME + "=?";
String[] selectionArgs = { "Braincol","Nixn.dev" };
String sortOrder = Contacts.PeopleColumns.NAME;
//使用 managedQuery 获取 Contacts.People 这个 ContentProvider 的 Cursor。
Cursor cursor = managedQuery(uri, projection, selection, selectionArgs,sortOrder);
上述示例的含义就是:在联系人列表中查询 NAME 为 Braincol 和 Nixn.dev 两个联系人的 "NAME" 和 "NOTES" 信息,并且将这些信息按照名字( NAME )排序,最后将排序之后的结果包装在一个 Cursor 对象中返回。

猜你喜欢

转载自xun005.iteye.com/blog/1736433