Ich stand vor dem Problem, Kontakte auf Android 2.0 und höher zu aktualisieren/einfügen. Es gibt kein Problem, einen neuen Kontakt einzufügen, wenn das Telefonbuch leer ist, aber wenn ich es getan habe 2. mal einige Dateien wie TEL, EMAIL sind verdoppelt und ausgelöst usw. aber N, FN, ORG sind in Ordnung (eine Kopie).Verwenden von ContentProviderOperation zum Aktualisieren und Einfügen von Kontakten
Nach Erhalt und Beratung von anderen Mitglied dieses Forum habe ich zuerst einen Kontakt aktualisiert und dann ContentProviderResult [] zurückgegeben uri's mit null dann mache ich eine Einfügen Aktion und es ging ok, aber danach habe ich ein Update und alle Kontakte aggregiert in eins - ich habe 1 Kontakt insted 3, der im Telefonbuch bestand. Dieser wurde beschädigt, die Kontaktfelder sind zufällig aufgebaut.
Ich setze Google-Konto.
Code:
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newUpdate(ContactsContract.RawContacts.CONTENT_URI)
.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, accountType)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, accountName)
.build());
// add name
ContentProviderOperation.Builder builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
builder.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
builder.withValue(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME, name);
// phones
ContentProviderOperation.Builder builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
builder.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneValue);
builder.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, phoneType);
builder.withValue(ContactsContract.CommonDataKinds.Phone.LABEL, phoneLabel);
ops.add(builder.build());
// emails ...
// orgs ...
try {
ContentProviderResult[] result = mContentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
}
} catch (Exception e) {
Log.e(LOG_TAG, "Exception while contact updating: " + e.getMessage());
}
Was in dieser Lösung ist falsch? Wie funktioniert die Aggregations-Engine?
Ich werde mich freuen für Hilfe.
Bogus
withSelection erfordert Parameter, die mit '?' für den String []
dh .withSelection (ContractsContract.Contacts._ID + "=?", new String [] { "5"})
Wenn Sie nicht haben Sie irgendwelche '? ist da gibt es nichts um die String [] -Werte an ... zu binden –
@wiseideal Danke für den Zeiger in die richtige Richtung. Die Auswahl war sicherlich mein Problem. – Bwire