描述:
擷取一個包含指定資料的 Cursor 對象,並由 Activity 來接管這個 Cursor 的生命週期。
首先該函數通過調用 getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder) 擷取一個包含指定資料(由 query 方法的參數指定)的 Cursor 對象。
然後通過調用 startManagingCursor(c) 實現由 Activity 來接管返回的 Cursor c 的生命週期。
原型:
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 中擷取資料。例如:
Uri uri = Contacts.People.CONTENT_URI; //連絡人清單URI。
projection, 用於標識 uri 中有哪些 columns 需要包含在返回的 Cursor 對象中。例如:
//待查詢的columns
String[] projection = { Contacts.PeopleColumns.NAME, Contacts.PeopleColumns.NOTES };
selection, 作為查詢的過濾參數(過濾出符合 selection 的資料),類似於 SQL 中 Where 語句之後的條件選擇。例如:
String selection = Contacts.People.NAME + “=?” //查詢條件
selectionArgs, 查詢條件參數,配合 selection 參數使用。例如:
String[] selectionArgs = {“Braincol”, “Nixn.dev”};//查詢條件參數
sortOrder,查詢結果的排序方式(按查詢列( projection 參數中的 columns )中的某個 column )排序)。例如:
String sortOrder = Contacts.PeopleColumns.NAME; //查詢結果的排序方式(按指定的查詢列排序)
傳回值:
一個包含指定資料的 Cursor 對象。
樣本:
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 對象中返回。