0

このコードを使用して連絡先の住所を更新しますが、既存の住所を持つ連絡先に対してのみ機能します。連絡先住所フィールドが空の場合、update() メソッドはゼロを返し、連絡先データは更新されません。既存の連絡先に住所を追加するにはどうすればよいですか?

//str_id is the contact's ID
//input is the String representing an address
ContentValues cv = new ContentValues();
String[] params = new String[] { str_id, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE };
cv.put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, input);
getContentResolver().update(ContactsContract.Data.CONTENT_URI, cv, ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?", params);

ContentProviderOperation で同等のロジックも試しましたが、同じ結果が得られました。前の例と同じように、既存の住所を更新することはできますが、住所を作成することはできません。

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, id)
    .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
    .withValue(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, input)
    .build());
4

1 に答える 1

0

アドレスを更新する前に、アドレスが存在するかどうかを確認する必要があります。アドレスが存在する場合、更新を行っているだけなので、上記のコードは正常に機能します。

アドレスの挿入を行っている間、実際には子の挿入を行っています」を参照してください ここ、問題に密接に関連する ContentProviderOperation の非常に良い説明..

于 2013-04-06T06:38:56.073 に答える