Condividi tramite


ContactsContract.Data Classe

Definizione

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

[Android.Runtime.Register("android/provider/ContactsContract$Data", DoNotGenerateAcw=true)]
public sealed class ContactsContract.Data : Java.Lang.Object
[<Android.Runtime.Register("android/provider/ContactsContract$Data", DoNotGenerateAcw=true)>]
type ContactsContract.Data = class
    inherit Object
Ereditarietà
ContactsContract.Data
Attributi

Commenti

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato. Ogni riga della tabella dati viene in genere usata per archiviare una singola informazione di contatto ,ad esempio un numero di telefono, e i relativi metadati associati, ad esempio se si tratta di un numero di lavoro o di casa.

<h3>Tipi di< dati/h3>

I dati sono una tabella generica che può contenere qualsiasi tipo di dati di contatto. Il tipo di dati archiviati in una determinata riga viene specificato dal valore della #MIMETYPE riga, che determina il significato delle colonne #DATA1 generica tramite #DATA15. Ad esempio, se il tipo di dati è CommonDataKinds.Phone Phone.CONTENT_ITEM_TYPE, la colonna #DATA1 archivia il numero di telefono, ma se il tipo di dati è CommonDataKinds.Email Email.CONTENT_ITEM_TYPE, archivia #DATA1 l'indirizzo di posta elettronica. Gli adattatori di sincronizzazione e le applicazioni possono introdurre tipi di dati specifici.

ContactsContract definisce un numero ridotto di tipi di dati predefiniti, ad esempio CommonDataKinds.Phone, CommonDataKinds.Email e così via. Per praticità, queste classi definiscono alias specifici del tipo di dati per DATA1 e così via. Ad esempio, CommonDataKinds.Phone Phone.NUMBER è uguale ContactsContract.Data Data.DATA1a .

#DATA1 è una colonna indicizzata e deve essere usata per l'elemento dati che dovrebbe essere usato più frequentemente nelle selezioni di query. Ad esempio, nel caso di una riga che rappresenta gli #DATA1 indirizzi di posta elettronica dovrebbe essere probabilmente usato per l'indirizzo di posta elettronica stesso, mentre ecc #DATA2 può essere usato per informazioni ausiliarie come il tipo di indirizzo di posta elettronica.

Per convenzione, #DATA15 viene usato per archiviare BLOB (dati binari).

L'adattatore di sincronizzazione per un determinato tipo di account deve gestire correttamente ogni tipo di dati utilizzato nei contatti non elaborati corrispondenti. In caso contrario, potrebbe comportare la perdita o il danneggiamento dei dati.

Analogamente, è consigliabile evitare di introdurre nuovi tipi di dati per i tipi di account di un'altra parte. Ad esempio, se si aggiunge una riga di dati per "brano preferito" a un contatto non elaborato di proprietà di un account Google, non verrà sincronizzata con il server, perché l'adattatore di sincronizzazione Google non sa come gestire questo tipo di dati. Di conseguenza, vengono introdotti nuovi tipi di dati insieme ai nuovi tipi di account, ad esempio nuovi adattatori di sincronizzazione.

<h3>Operazioni< batch/h3>

Le righe di dati possono essere inserite/aggiornate/eliminate usando i metodi tradizionali ContentResolver#insertContentResolver#update , eContentResolver#delete, tuttavia, il meccanismo più recente basato su un batch di ContentProviderOperation proverà a essere una scelta migliore in quasi tutti i casi. Tutte le operazioni in un batch vengono eseguite in una singola transazione, che garantisce che lo stato lato telefono e lato server di un contatto non elaborato sia sempre coerente. Inoltre, l'approccio basato su batch è molto più efficiente: non solo le operazioni di database sono più veloci quando vengono eseguite in una singola transazione, ma anche l'invio di un batch di comandi al provider di contenuti consente di risparmiare molto tempo sul passaggio del contesto tra il processo e il processo in cui viene eseguito il provider di contenuti.

Lo capovolgimento dell'uso di operazioni in batch consiste nel fatto che un batch di grandi dimensioni potrebbe bloccare il database per molto tempo impedendo ad altre applicazioni di accedere ai dati e causando potenzialmente le finestre di dialogo "Application Not Responding".

Per evitare tali blocchi del database, assicurarsi di inserire "punti di resa" nel batch. Un punto di resa indica al provider di contenuti che prima di eseguire l'operazione successiva può eseguire il commit delle modifiche già apportate, restituire ad altre richieste, aprire un'altra transazione e continuare l'elaborazione delle operazioni. Un punto di resa non eseguirà automaticamente il commit della transazione, ma solo se è presente un'altra richiesta in attesa nel database. In genere, un adattatore di sincronizzazione deve inserire un punto di resa all'inizio di ogni sequenza di operazioni di contatto non elaborate nel batch. Vedere ContentProviderOperation.Builder#withYieldAllowed(boolean).

<h3 Operations</h3>><dl><dt><b>Insert</b></dt dt><dd>

È possibile inserire una singola riga di dati usando il metodo tradizionale ContentResolver#insert(Uri, ContentValues) . È consigliabile inserire sempre più righe come batch.

Esempio di inserimento tradizionale:

ContentValues values = new ContentValues();
            values.put(Data.RAW_CONTACT_ID, rawContactId);
            values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
            values.put(Phone.NUMBER, "1-800-GOOG-411");
            values.put(Phone.TYPE, Phone.TYPE_CUSTOM);
            values.put(Phone.LABEL, "free directory assistance");
            Uri dataUri = getContentResolver().insert(Data.CONTENT_URI, values);

La stessa operazione eseguita con ContentProviderOperations:

ArrayList&lt;ContentProviderOperation&gt; ops =
                     new ArrayList&lt;ContentProviderOperation&gt;();

            ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
                     .withValue(Data.RAW_CONTACT_ID, rawContactId)
                     .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
                     .withValue(Phone.NUMBER, "1-800-GOOG-411")
                     .withValue(Phone.TYPE, Phone.TYPE_CUSTOM)
                     .withValue(Phone.LABEL, "free directory assistance")
                     .build());
            getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

</p><dt><b>Update</b></dt dd><>

Come per l'inserimento, l'aggiornamento può essere eseguito in modo incrementale o come batch, la modalità batch è il metodo preferito:

ArrayList&lt;ContentProviderOperation&gt; ops =
                     new ArrayList&lt;ContentProviderOperation&gt;();

            ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
                     .withSelection(Data._ID + "=?", new String[]{String.valueOf(dataId)})
                     .withValue(Email.DATA, "somebody@android.com")
                     .build());
            getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

</p></dd><dt><b>Delete</b></dt dt><dd>

Come per l'inserimento e l'aggiornamento, l'eliminazione può essere eseguita usando il ContentResolver#delete metodo o un ContentProviderOperation:

ArrayList&lt;ContentProviderOperation&gt; ops =
                     new ArrayList&lt;ContentProviderOperation&gt;();

            ops.add(ContentProviderOperation.newDelete(Data.CONTENT_URI)
                     .withSelection(Data._ID + "=?", new String[]{String.valueOf(dataId)})
                     .build());
            getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

</p></dd><dt><b>Query</b></dt dd><>

<dl><dt>Ricerca di tutti i dati di un determinato tipo per un determinato contatto</dt><dd>

Cursor c = getContentResolver().query(Data.CONTENT_URI,
                     new String[] {Data._ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL},
                     Data.CONTACT_ID + &quot;=?&quot; + " AND "
                             + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'",
                     new String[] {String.valueOf(contactId)}, null);

</p>

</dd><dt>Ricerca di tutti i dati di un determinato tipo per un determinato contatto< non elaborato/dt><dd>

Cursor c = getContentResolver().query(Data.CONTENT_URI,
                     new String[] {Data._ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL},
                     Data.RAW_CONTACT_ID + &quot;=?&quot; + " AND "
                             + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'",
                     new String[] {String.valueOf(rawContactId)}, null);

</dd><dt>Ricerca di tutti i dati per un determinato contatto< non elaborato/dt><dd> Più adattatori di sincronizzazione desidera leggere tutte le righe di dati per un contatto non elaborato insieme al contatto non elaborato stesso. Per questo è consigliabile usare .RawContactsEntity Vedere anche RawContacts. </dd></dl></p></dd></dl><h2>Columns</h2>

Molte colonne sono disponibili tramite una Data#CONTENT_URI query. Per ottenere prestazioni ottimali, è consigliabile specificare in modo esplicito una proiezione solo per le colonne necessarie.

<table class="jd-sumtable"><tr><th colspan='4'Data<>/th<>/tr tr<>><td style="width: 7em;">long</td td><style="width: 20em;">#_ID</td td><style="width: 5em;">ID riga td di sola< lettura/td<>>. L'adapter di sincronizzazione deve provare a mantenere gli ID riga durante gli aggiornamenti. In altre parole, sarebbe una cattiva idea eliminare e reinserire una riga di dati. Un adattatore di sincronizzazione deve sempre eseguire un aggiornamento.</td></tr tr><<>td>String</td td><td#MIMETYPE>< td>><read/write-once</td td><>

Tipo MIME dell'elemento rappresentato da questa riga. Esempi di tipi MIME comuni sono: <ul><li><CommonDataKinds.StructuredName StructuredName.CONTENT_ITEM_TYPE/li><>CommonDataKinds.Phone Phone.CONTENT_ITEM_TYPE</<<CommonDataKinds.Email Email.CONTENT_ITEM_TYPE>>li/li/<<CommonDataKinds.Photo Photo.CONTENT_ITEM_TYPE>>li/><CommonDataKinds.Organization Organization.CONTENT_ITEM_TYPE><li li/li/>CommonDataKinds.Im Im.CONTENT_ITEM_TYPE<<>li<CommonDataKinds.Nickname Nickname.CONTENT_ITEM_TYPE<>> li/li/li/<><>CommonDataKinds.StructuredPostal StructuredPostal.CONTENT_ITEM_TYPE>CommonDataKinds.GroupMembership GroupMembership.CONTENT_ITEM_TYPE<>>CommonDataKinds.Website Website.CONTENT_ITEM_TYPE<<<><CommonDataKinds.Event Event.CONTENT_ITEM_TYPE><>><>CommonDataKinds.Note Note.CONTENT_ITEM_TYPE<><li><CommonDataKinds.Relation Relation.CONTENT_ITEM_TYPE/liCommonDataKinds.SipAddress SipAddress.CONTENT_ITEM_TYPE<>/li<>/ul><>

</td></tr tr><<>td>long</td td>#RAW_CONTACT_ID><< td><>read/write-once</td td td<>>L'ID della riga nella RawContacts tabella a cui appartengono questi dati.</td></tr tr>><<td>int</td><td>#IS_PRIMARY< td<>>read/write</td td td><>Indica se si tratta della voce principale del relativo tipo per il contatto non elaborato a cui appartiene. "1" se true, "0" se false. </td></tr tr>><<td>int</td><td>#IS_SUPER_PRIMARY< td<>>read/write</td td td><>Indica se si tratta della voce principale del relativo tipo per il contatto aggregato a cui appartiene. Anche qualsiasi record di dati "super primary" deve essere "primario". Ad esempio, la voce super-primaria può essere interpretata come il valore di contatto predefinito del tipo ( ad esempio, il numero di telefono predefinito da usare per il contatto).</td></tr tr>><<td>int</td td><>#DATA_VERSION< td td><>read-only</td td><>La versione di questo record di dati. Ogni volta che la riga di dati cambia la versione viene aggiornata. Questo valore aumenta in modo monotonico.</td></tr tr><<>td>Any type</td td>>#DATA1<<br>#DATA2<br>><#DATA12><#DATA11><<>#DATA5#DATA6><<>#DATA4#DATA7><<>#DATA3#DATA10<<>#DATA9<#DATA13#DATA8>br#DATA15<<#DATA14>>/td td>><read/write</td td td><>

Colonne di dati generici. Il significato di ogni colonna è determinato dall'oggetto #MIMETYPE. Per convenzione, #DATA15 viene usato per archiviare BLOB (dati binari).

Le colonne di dati il cui significato non è definito in modo esplicito per un oggetto MIMETYPE specificato non devono essere utilizzate. Non c'è alcuna garanzia che qualsiasi adattatore di sincronizzazione li manterrà. Gli adattatori di sincronizzazione stessi non devono usare queste colonne, ma devono invece usare #SYNC1-#SYNC4.

</td></tr tr>><<td>Any type</td td><><#SYNC1br><#SYNC2br>#SYNC3</><#SYNC4td td td>><read/write</td td><>Generic columns for use by sync adapters. Ad esempio, una riga Photo può archiviare l'URL dell'immagine in SYNC1, uno stato (non caricato, caricato, caricato, errore) in SYNC2, numero di versione lato server in SYNC3 e codice di errore in SYNC4.</td></tr></table>

Alcune colonne dell'aggiornamento dello stato associato più recente sono disponibili anche tramite un join implicito.

<table class="jd-sumtable"><tr><th colspan='4'Join> with<StatusUpdates /th<>/tr tr<>><td style="width: 7em;">int</td td><style="width: 20em;">#PRESENCE</td td><style="width: 5em;">stato di presenza di messaggistica istantanea td di sola< lettura/td><>collegato a questa riga di dati. Confrontare con #CONTACT_PRESENCE, che contiene la presenza del contatto in tutte le righe di messaggistica istantanea. Vedere StatusUpdates per le singole definizioni di stato. Il provider può scegliere di non archiviare questo valore nell'archiviazione permanente. L'aspettativa è che lo stato della presenza verrà aggiornato regolarmente. </td></tr tr><<>td>String</td td><td<#STATUS> td><>read-only</td td td<>>Aggiornamento dello stato più recente collegato a questa riga di dati.</td></tr tr><<>td>long</td td><td<#STATUS_TIMESTAMP> td><>read-only</td<>>Il tempo assoluto in millisecondi quando lo stato più recente è stato inserito/aggiornato per questa riga di dati.</td></tr tr>><<td>String</td td><#STATUS_RES_PACKAGE<> td td><>read-only</td td Td<>>Pacchetto contenente risorse per questo stato: etichetta e icona.</td></tr tr>><<td>long</td td><>#STATUS_LABEL< td td>><read-only</td><>L'ID risorsa dell'etichetta che descrive l'origine dell'aggiornamento dello stato collegato a questa riga di dati. Questa risorsa ha come ambito l'oggetto #STATUS_RES_PACKAGE.</td></tr tr>><<td>long</td td>#STATUS_ICON<<> td><read-only></td><>L'ID risorsa dell'icona per l'origine dell'aggiornamento dello stato collegato a questa riga di dati. Questa risorsa ha come ambito l'oggetto #STATUS_RES_PACKAGE.</td></tr></table>

Alcune colonne del contatto non elaborato associato sono disponibili anche tramite un join implicito. Le altre colonne vengono escluse come non interessate in questo contesto.

<table class="jd-sumtable"><tr><th colspan='4'Join> with<ContactsContract.RawContacts /th<>/tr tr<>><td style="width: 7em;">long</td td><style="width: 20em;">#CONTACT_ID</td td><style="width: 5em;">read-only</td td>><L'ID della riga nella Contacts tabella a cui appartengono questi dati.</td></tr tr><<>td>int</td td><<#AGGREGATION_MODE> td><read-only></td td<>>vedere .<RawContacts/td></tr tr><<>td>int</td td><<#DELETED> td><read-only></td td<>>vedere .<RawContacts/td></tr></table>

La colonna ID per la tabella ContactsContract.Contacts contatto aggregata associata è disponibile tramite il join implicito alla RawContacts tabella, vedere sopra. Le colonne rimanenti di questa tabella sono disponibili anche tramite un join implicito. Ciò facilita la ricerca in base al valore di un singolo elemento dati, ad esempio l'indirizzo di posta elettronica.

<table class="jd-sumtable"><tr><th colspan='4'Join> with<ContactsContract.Contacts /th<>/tr tr<>><td style="width: 7em;">String</td td><style="width: 20em;">#LOOKUP_KEY</td td><style="width: 5em;">read-only</td td><>See ContactsContract.Contacts</td></tr tr><<>td>String</td><>>#DISPLAY_NAME<<> read-only</td td><td>See<ContactsContract.Contacts /td<>/tr tr<<>>td>long</td td<>td>#PHOTO_ID< td>><read-only</td><td>see .<ContactsContract.Contacts/td></tr tr><<>td>int</td td><<#IN_VISIBLE_GROUP> td><read-only></td td<>>vedere .<ContactsContract.Contacts/td></tr tr><<>td>int</td td><<#HAS_PHONE_NUMBER> td><read-only></td td<>>vedere .<ContactsContract.Contacts/td></tr tr><<>td>int</td td><<#STARRED> td><read-only></td td<>>vedere .<ContactsContract.Contacts/td></tr tr>><<td>String</td td<>td#CUSTOM_RINGTONE>< td><>read-only</td td<>>vedere .<ContactsContract.Contacts/td></tr tr><<>td>int</td td><<#SEND_TO_VOICEMAIL> td><read-only></td td<>>vedere .<ContactsContract.Contacts/td></tr tr><<>td>int</td td><<#CONTACT_PRESENCE> td><read-only></td td<>>vedere .<ContactsContract.Contacts/td></tr tr>><<td>String</td td<>td#CONTACT_STATUS>< td><>read-only</td td<>>vedere .<ContactsContract.Contacts/td></tr tr><<>td>long</td td><<>#CONTACT_STATUS_TIMESTAMP td td><>read-only</td td td<>>Vedere .<ContactsContract.Contacts/td></tr tr>><<td>String</td td<>td#CONTACT_STATUS_RES_PACKAGE>< td><>read-only</td td<>>vedere .<ContactsContract.Contacts/td></tr tr><<>td>long</td td><<>#CONTACT_STATUS_LABEL td td><>read-only</td td td<>>Vedere .<ContactsContract.Contacts/td></tr tr><<>td>long</td td><<>#CONTACT_STATUS_ICON td td><>read-only</td td td<>>Vedere .<ContactsContract.Contacts/td></tr></table>

Documentazione java per android.provider.ContactsContract.Data.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.

Campi

ContentType

Tipo MIME dei risultati di #CONTENT_URI.

ExtraAddressBookIndex

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

ExtraAddressBookIndexCounts

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

ExtraAddressBookIndexTitles

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

VisibleContactsOnly

Parametro booleano per Data#CONTENT_URI.

Proprietà

Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
ContentUri

URI di stile content:// per questa tabella, che richiede una directory di righe di dati corrispondenti ai criteri di selezione.

Handle

Handle per l'istanza di Android sottostante.

(Ereditato da Object)
JniIdentityHashCode

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

(Ereditato da Object)
JniPeerMembers

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

PeerReference

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

(Ereditato da Object)
ThresholdClass

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

(Ereditato da Object)
ThresholdType

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

(Ereditato da Object)

Metodi

Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
Dispose()

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

(Ereditato da Object)
Dispose(Boolean)

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

(Ereditato da Object)
Equals(Object)

Indica se un altro oggetto è "uguale a" questo.

(Ereditato da Object)
GetContactLookupUri(ContentResolver, Uri)

Creare uno android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI stile Uri per la voce padre android.provider.ContactsContract.Contacts della voce specificata ContactsContract.Data .

GetHashCode()

Restituisce un valore del codice hash per l'oggetto.

(Ereditato da Object)
JavaFinalize()

Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto .

(Ereditato da Object)
Notify()

Riattiva un singolo thread in attesa del monitor dell'oggetto.

(Ereditato da Object)
NotifyAll()

Riattiva tutti i thread in attesa del monitor dell'oggetto.

(Ereditato da Object)
SetHandle(IntPtr, JniHandleOwnership)

Imposta la proprietà Handle.

(Ereditato da Object)
ToArray<T>()

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

(Ereditato da Object)
ToString()

Restituisce una rappresentazione di stringa dell'oggetto.

(Ereditato da Object)
UnregisterFromRuntime()

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

(Ereditato da Object)
Wait()

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo <>una notifica</em> o <em>interrotto</em>.

(Ereditato da Object)
Wait(Int64)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo>< una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale.

(Ereditato da Object)
Wait(Int64, Int32)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo>< una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

IJavaPeerable.Disposed()

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

(Ereditato da Object)
IJavaPeerable.DisposeUnlessReferenced()

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

(Ereditato da Object)
IJavaPeerable.Finalized()

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

(Ereditato da Object)
IJavaPeerable.JniManagedPeerState

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

(Ereditato da Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

(Ereditato da Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

(Ereditato da Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

(Ereditato da Object)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo di tipo controllato dal runtime Android.

JavaCast<TResult>(IJavaObject)

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

GetJniTypeName(IJavaPeerable)

Costanti per la tabella dati, che contiene punti dati associati a un contatto non elaborato.

Si applica a