ContentProvider.Query Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Overload
| Nome | Descrizione |
|---|---|
| Query(Uri, String[], String, String[], String) |
Implementare questa opzione per gestire le richieste di query dai client. |
| Query(Uri, String[], String, String[], String, CancellationSignal) |
Implementare questa opzione per gestire le richieste di query dai client con supporto per l'annullamento. |
| Query(Uri, String[], Bundle, CancellationSignal) |
Implementare questa opzione per gestire le richieste di query in cui gli argomenti vengono compressi in un oggetto |
Query(Uri, String[], String, String[], String)
Implementare questa opzione per gestire le richieste di query dai client.
[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
Parametri
- uri
- Uri
URI da eseguire per la query. Questo sarà l'URI completo inviato dal client; se il client richiede un record specifico, l'URI terminerà in un numero di record che l'implementazione deve analizzare e aggiungere a una clausola WHERE o HAVING, specificando tale valore _id.
- projection
- String[]
Elenco di colonne da inserire nel cursore. Se null tutte le colonne sono incluse.
- selection
- String
Criteri di selezione da applicare durante il filtro delle righe.
Se null vengono incluse tutte le righe.
- selectionArgs
- String[]
È possibile includere ?s nella selezione, che verrà sostituito dai valori di selectionArgs, in ordine di visualizzazione nella selezione. I valori verranno associati come stringhe.
- sortOrder
- String
Modalità di ordinamento delle righe nel cursore.
Se null il provider è libero di definire l'ordinamento.
Valori restituiti
un cursore o null.
- Attributi
Commenti
Implementare questa opzione per gestire le richieste di query dai client.
android.os.Build.VERSION_CODES#O Le app destinate o superiori devono eseguire l'override e fornire un'implementazione #query(Uri, String[], Bundle, CancellationSignal) stub di questo metodo.
Questo metodo può essere chiamato da più thread, come descritto in Processi e thread.
Esempio di chiamata client:
// 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.
Implementazione di esempio:
// SQLiteQueryBuilder is a helper class that creates the
// proper SQL syntax for us.
SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder();
// Guard against SQL injection attacks
qBuilder.setStrict(true);
qBuilder.setProjectionMap(MAP_OF_QUERYABLE_COLUMNS);
qBuilder.setStrictColumns(true);
qBuilder.setStrictGrammar(true);
// 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;
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dalla e usati in base ai termini descritti in Creative License 2.5 Attribution License.
Si applica a
Query(Uri, String[], String, String[], String, CancellationSignal)
Implementare questa opzione per gestire le richieste di query dai client con supporto per l'annullamento.
[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
Parametri
- uri
- Uri
URI da eseguire per la query. Questo sarà l'URI completo inviato dal client; se il client richiede un record specifico, l'URI terminerà in un numero di record che l'implementazione deve analizzare e aggiungere a una clausola WHERE o HAVING, specificando tale valore _id.
- projection
- String[]
Elenco di colonne da inserire nel cursore. Se null tutte le colonne sono incluse.
- selection
- String
Criteri di selezione da applicare durante il filtro delle righe.
Se null vengono incluse tutte le righe.
- selectionArgs
- String[]
È possibile includere ?s nella selezione, che verrà sostituito dai valori di selectionArgs, in ordine di visualizzazione nella selezione. I valori verranno associati come stringhe.
- sortOrder
- String
Modalità di ordinamento delle righe nel cursore.
Se null il provider è libero di definire l'ordinamento.
- cancellationSignal
- CancellationSignal
Segnale per annullare l'operazione in corso o null in caso contrario.
Se l'operazione viene annullata, android.os.OperationCanceledException verrà generata quando viene eseguita la query.
Valori restituiti
un cursore o null.
- Attributi
Commenti
Implementare questa opzione per gestire le richieste di query dai client con supporto per l'annullamento.
Le app destinate android.os.Build.VERSION_CODES#O o superiori devono eseguire l'override #query(Uri, String[], Bundle, CancellationSignal) invece di questo metodo.
Questo metodo può essere chiamato da più thread, come descritto in Processi e thread.
Esempio di chiamata client:
// 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.
Implementazione di esempio:
// SQLiteQueryBuilder is a helper class that creates the
// proper SQL syntax for us.
SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder();
// Guard against SQL injection attacks
qBuilder.setStrict(true);
qBuilder.setProjectionMap(MAP_OF_QUERYABLE_COLUMNS);
qBuilder.setStrictColumns(true);
qBuilder.setStrictGrammar(true);
// 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;
Se si implementa questo metodo, è necessario implementare anche la versione di che non accetta un segnale di annullamento per garantire un'operazione corretta nelle versioni precedenti di Android Framework in cui l'overload del segnale di #query(Uri, String[], String, String[], String) annullamento non era disponibile.
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dalla e usati in base ai termini descritti in Creative License 2.5 Attribution License.
Si applica a
Query(Uri, String[], Bundle, CancellationSignal)
Implementare questa opzione per gestire le richieste di query in cui gli argomenti vengono compressi in un oggetto 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
Parametri
- uri
- Uri
URI da eseguire per la query. Questo sarà l'URI completo inviato dal client.
- projection
- String[]
Elenco di colonne da inserire nel cursore.
Se null specificare un set predefinito di colonne.
- queryArgs
- Bundle
Bundle contenente informazioni aggiuntive necessarie per l'operazione. Gli argomenti possono includere argomenti di stile SQL, ad esempio ContentResolver#QUERY_ARG_SQL_LIMIT, ma si noti che la documentazione per ogni singolo provider indicherà gli argomenti supportati.
- cancellationSignal
- CancellationSignal
Segnale per annullare l'operazione in corso o null.
Valori restituiti
un cursore o null.
- Attributi
Commenti
Implementare questa opzione per gestire le richieste di query in cui gli argomenti vengono compressi in un oggetto Bundle. Gli argomenti possono includere argomenti di query di stile SQL tradizionali. Quando presenti, questi devono essere gestiti in base al contratto stabilito in #query(Uri, String[], String, String[], String, CancellationSignal).
Gli argomenti SQL tradizionali sono disponibili nel bundle usando le chiavi seguenti: <li>liandroid.content.ContentResolver#QUERY_ARG_SQL_SELECTION<>android.content.ContentResolver#QUERY_ARG_SQL_SELECTION_ARGS<>android.content.ContentResolver#QUERY_ARG_SQL_SORT_ORDER
Questo metodo può essere chiamato da più thread, come descritto in Processi e thread.
Esempio di chiamata client:
// 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.
Implementazione di esempio:
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;
Vedere #query(Uri, String[], String, String[], String, CancellationSignal) per informazioni dettagliate sull'implementazione.
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dalla e usati in base ai termini descritti in Creative License 2.5 Attribution License.