ContentProvider.Query 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
Query(Uri, String[], String, String[], String) |
實作此專案以處理來自客戶端的查詢要求。 |
Query(Uri, String[], String, String[], String, CancellationSignal) |
實作此動作,以處理支援取消的客戶端查詢要求。 |
Query(Uri, String[], Bundle, CancellationSignal) |
實作此作業,以處理自變數封裝到 的 |
Query(Uri, String[], String, String[], String)
實作此專案以處理來自客戶端的查詢要求。
[Android.Runtime.Register("query", "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;", "GetQuery_Landroid_net_Uri_arrayLjava_lang_String_Ljava_lang_String_arrayLjava_lang_String_Ljava_lang_String_Handler")]
public abstract Android.Database.ICursor? Query (Android.Net.Uri uri, string[]? projection, string? selection, string[]? selectionArgs, string? sortOrder);
[<Android.Runtime.Register("query", "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;", "GetQuery_Landroid_net_Uri_arrayLjava_lang_String_Ljava_lang_String_arrayLjava_lang_String_Ljava_lang_String_Handler")>]
abstract member Query : Android.Net.Uri * string[] * string * string[] * string -> Android.Database.ICursor
參數
- uri
- Uri
要查詢的 URI。 這會是客戶端傳送的完整 URI;如果用戶端要求特定記錄,URI 將會以實作應該剖析並新增至 WHERE 或 HAVING 子句的記錄編號結尾,並指定_id值。
- projection
- String[]
要放入數據指標的數據列清單。 如果 null
包含所有數據行。
- selection
- String
篩選數據列時要套用的選取準則。
如果 null
包含所有數據列。
- selectionArgs
- String[]
您可以在選取範圍中包含 ?s,這會由 selectionArgs 的值所取代,以便它們出現在選取範圍中。 這些值會系結為 Strings。
- sortOrder
- String
數據指標中的數據列應該如何排序。
如果 null
接著提供者可以自由定義排序順序。
傳回
資料指標或 null
。
- 屬性
備註
實作此專案以處理來自客戶端的查詢要求。
以 android.os.Build.VERSION_CODES#O
或更高版本為目標的應用程式應該覆寫 #query(Uri, String[], Bundle, CancellationSignal)
並提供此方法的存根實作。
此方法可以從多個線程呼叫,如進程和線程中所述。
範例用戶端呼叫:
// Request a specific record.
Cursor managedCursor = managedQuery(
ContentUris.withAppendedId(Contacts.People.CONTENT_URI, 2),
projection, // Which columns to return.
null, // WHERE clause.
null, // WHERE clause value substitution
People.NAME + " ASC"); // Sort order.
範例實作:
// SQLiteQueryBuilder is a helper class that creates the
// proper SQL syntax for us.
SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder();
// Set the table we're querying.
qBuilder.setTables(DATABASE_TABLE_NAME);
// If the query ends in a specific record number, we're
// being asked for a specific record, so set the
// WHERE clause in our query.
if((URI_MATCHER.match(uri)) == SPECIFIC_MESSAGE){
qBuilder.appendWhere("_id=" + uri.getPathLeafId());
}
// Make the query.
Cursor c = qBuilder.query(mDb,
projection,
selection,
selectionArgs,
groupBy,
having,
sortOrder);
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
適用於
Query(Uri, String[], String, String[], String, CancellationSignal)
實作此動作,以處理支援取消的客戶端查詢要求。
[Android.Runtime.Register("query", "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;", "GetQuery_Landroid_net_Uri_arrayLjava_lang_String_Ljava_lang_String_arrayLjava_lang_String_Ljava_lang_String_Landroid_os_CancellationSignal_Handler")]
public virtual Android.Database.ICursor? Query (Android.Net.Uri uri, string[]? projection, string? selection, string[]? selectionArgs, string? sortOrder, Android.OS.CancellationSignal? cancellationSignal);
[<Android.Runtime.Register("query", "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;", "GetQuery_Landroid_net_Uri_arrayLjava_lang_String_Ljava_lang_String_arrayLjava_lang_String_Ljava_lang_String_Landroid_os_CancellationSignal_Handler")>]
abstract member Query : Android.Net.Uri * string[] * string * string[] * string * Android.OS.CancellationSignal -> Android.Database.ICursor
override this.Query : Android.Net.Uri * string[] * string * string[] * string * Android.OS.CancellationSignal -> Android.Database.ICursor
參數
- uri
- Uri
要查詢的 URI。 這會是客戶端傳送的完整 URI;如果用戶端要求特定記錄,URI 將會以實作應該剖析並新增至 WHERE 或 HAVING 子句的記錄編號結尾,並指定_id值。
- projection
- String[]
要放入數據指標的數據列清單。 如果 null
包含所有數據行。
- selection
- String
篩選數據列時要套用的選取準則。
如果 null
包含所有數據列。
- selectionArgs
- String[]
您可以在選取範圍中包含 ?s,這會由 selectionArgs 的值所取代,以便它們出現在選取範圍中。 這些值會系結為 Strings。
- sortOrder
- String
數據指標中的數據列應該如何排序。
如果 null
接著提供者可以自由定義排序順序。
- cancellationSignal
- CancellationSignal
取消進行中作業的訊號,如果沒有 null
則為 。
如果取消作業,則會 android.os.OperationCanceledException
在執行查詢時擲回。
傳回
資料指標或 null
。
- 屬性
備註
實作此動作,以處理支援取消的客戶端查詢要求。
以 android.os.Build.VERSION_CODES#O
或更高版本為目標的應用程式應該覆寫 #query(Uri, String[], Bundle, CancellationSignal)
,而不是此方法。
此方法可以從多個線程呼叫,如進程和線程中所述。
範例用戶端呼叫:
// Request a specific record.
Cursor managedCursor = managedQuery(
ContentUris.withAppendedId(Contacts.People.CONTENT_URI, 2),
projection, // Which columns to return.
null, // WHERE clause.
null, // WHERE clause value substitution
People.NAME + " ASC"); // Sort order.
範例實作:
// SQLiteQueryBuilder is a helper class that creates the
// proper SQL syntax for us.
SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder();
// Set the table we're querying.
qBuilder.setTables(DATABASE_TABLE_NAME);
// If the query ends in a specific record number, we're
// being asked for a specific record, so set the
// WHERE clause in our query.
if((URI_MATCHER.match(uri)) == SPECIFIC_MESSAGE){
qBuilder.appendWhere("_id=" + uri.getPathLeafId());
}
// Make the query.
Cursor c = qBuilder.query(mDb,
projection,
selection,
selectionArgs,
groupBy,
having,
sortOrder);
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
如果您實作這個方法,則也必須實作 的版本,該版本 #query(Uri, String[], String, String[], String)
不會接受取消訊號,以確保舊版 Android Framework 上的正確作業,其中取消訊號多載無法使用。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
適用於
Query(Uri, String[], Bundle, CancellationSignal)
實作此作業,以處理自變數封裝到 的 Bundle
查詢要求。
[Android.Runtime.Register("query", "(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;", "GetQuery_Landroid_net_Uri_arrayLjava_lang_String_Landroid_os_Bundle_Landroid_os_CancellationSignal_Handler", ApiSince=26)]
public virtual Android.Database.ICursor? Query (Android.Net.Uri uri, string[]? projection, Android.OS.Bundle? queryArgs, Android.OS.CancellationSignal? cancellationSignal);
[<Android.Runtime.Register("query", "(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;", "GetQuery_Landroid_net_Uri_arrayLjava_lang_String_Landroid_os_Bundle_Landroid_os_CancellationSignal_Handler", ApiSince=26)>]
abstract member Query : Android.Net.Uri * string[] * Android.OS.Bundle * Android.OS.CancellationSignal -> Android.Database.ICursor
override this.Query : Android.Net.Uri * string[] * Android.OS.Bundle * Android.OS.CancellationSignal -> Android.Database.ICursor
參數
- uri
- Uri
要查詢的 URI。 這會是客戶端傳送的完整 URI。
- projection
- String[]
要放入數據指標的數據列清單。
如果 null
提供一組預設的數據行。
- queryArgs
- Bundle
套件組合,其中包含作業所需的其他資訊。 自變數可能包含 SQL 樣式自變數,例如 ContentResolver#QUERY_ARG_SQL_LIMIT
,但請注意,每個個別提供者的檔都會指出它們支援的自變數。
- cancellationSignal
- CancellationSignal
取消進行中作業的訊號,或 null
。
傳回
資料指標或 null
。
- 屬性
備註
實作此作業,以處理自變數封裝到 的 Bundle
查詢要求。 自變數可能包含傳統的 SQL 樣式查詢自變數。 出現時,應根據 中 #query(Uri, String[], String, String[], String, CancellationSignal)
建立的合約來處理這些作業。
使用下列索引鍵可在套件組合中找到傳統的 SQL 自變數:<li>android.content.ContentResolver#QUERY_ARG_SQL_SELECTION
<li li li>android.content.ContentResolver#QUERY_ARG_SQL_SELECTION_ARGS
<>android.content.ContentResolver#QUERY_ARG_SQL_SORT_ORDER
此方法可以從多個線程呼叫,如進程和線程中所述。
範例用戶端呼叫:
// Request 20 records starting at row index 30.
Bundle queryArgs = new Bundle();
queryArgs.putInt(ContentResolver.QUERY_ARG_OFFSET, 30);
queryArgs.putInt(ContentResolver.QUERY_ARG_LIMIT, 20);
Cursor cursor = getContentResolver().query(
contentUri, // Content Uri is specific to individual content providers.
projection, // String[] describing which columns to return.
queryArgs, // Query arguments.
null); // Cancellation signal.
範例實作:
int recordsetSize = 0x1000; // Actual value is implementation specific.
queryArgs = queryArgs != null ? queryArgs : Bundle.EMPTY; // ensure queryArgs is non-null
int offset = queryArgs.getInt(ContentResolver.QUERY_ARG_OFFSET, 0);
int limit = queryArgs.getInt(ContentResolver.QUERY_ARG_LIMIT, Integer.MIN_VALUE);
MatrixCursor c = new MatrixCursor(PROJECTION, limit);
// Calculate the number of items to include in the cursor.
int numItems = MathUtils.constrain(recordsetSize - offset, 0, limit);
// Build the paged result set....
for (int i = offset; i < offset + numItems; i++) {
// populate row from your data.
}
Bundle extras = new Bundle();
c.setExtras(extras);
// Any QUERY_ARG_* key may be included if honored.
// In an actual implementation, include only keys that are both present in queryArgs
// and reflected in the Cursor output. For example, if QUERY_ARG_OFFSET were included
// in queryArgs, but was ignored because it contained an invalid value (like –273),
// then QUERY_ARG_OFFSET should be omitted.
extras.putStringArray(ContentResolver.EXTRA_HONORED_ARGS, new String[] {
ContentResolver.QUERY_ARG_OFFSET,
ContentResolver.QUERY_ARG_LIMIT
});
extras.putInt(ContentResolver.EXTRA_TOTAL_COUNT, recordsetSize);
cursor.setNotificationUri(getContext().getContentResolver(), uri);
return cursor;
如需實作詳細資料,請參閱 #query(Uri, String[], String, String[], String, CancellationSignal)
。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。