質問
私はアンドロイドの接触帳にETC(名前、電話番号、電子メール、組織の詳細、など)の連絡先の詳細は、を更新するために、私のコードをしたいと思います。私は(具体的には、名前、電話番号、電子メール)数を変更することに成功すべてではありません。
でした私は組織の詳細(Contacts.Organizations.COMPANYとContacts.Organizations.TITLE)を更新しようとするたびに私のアプリは、の例外の
をスロー接触のためにjava.lang.UnsupportedOperationException: Cannot update URL: content://contacts/people/69/organizations/69
次のようにのコードスニペットは
Uri baseUri = ContentUris.withAppendedId(People.CONTENT_URI, 69);
Uri uri = Uri.withAppendedPath(baseUri, People.Phones.CONTENT_DIRECTORY);
Cursor c = this.getContentResolver().query(uri,
new String[] { Contacts.Organizations._ID, Contacts.Organizations.COMPANY,Contacts.Organizations.TITLE},
null, null, null);
if(c.getCount() > 0) {
uri = ContentUris.withAppendedId(uri, c.getString(0));
ContentValues val1 = new ContentValues();
val1.put(Contacts.Organizations.COMPANY, "arw");
val1.put(Contacts.Organizations.TYPE, Contacts.Organizations.TYPE_WORK);
val1.put(Contacts.Organizations.TITLE, "abcdef");
this.getContentResolver().insert(uri, val1);
解決
あなたはそのフィールドの既存のIDを知っておく必要があります連絡先のいずれかのデータを更新するために。その後、私は更新したかった様々な分野のための別個のContentProviderOperationオブジェクトを取得ArrayListにそれらを追加しContentProvider.applyBatch()メソッドを使用するビルダーのクラスを使用する
他のヒント
私は、会社とタイトル情報を更新しようと多くの時間を費やしました。以下は、今私のために動作します。
Uri workUri = Uri.withAppendedPath(contactUri, android.provider.Contacts.Organizations.CONTENT_DIRECTORY);
values.clear();
values.put(android.provider.Contacts.Organizations.COMPANY, "company");
values.put(android.provider.Contacts.Organizations.TYPE, android.provider.Contacts.Organizations.TYPE_WORK);
values.put(android.provider.Contacts.Organizations.TITLE, "job title");
values.put(android.provider.Contacts.Organizations.ISPRIMARY, 1);
getContentResolver().insert(workUri, values);
String[] projection = new String[] { ContactsContract.RawContacts._ID };
String where = ContactsContract.RawContacts.CONTACT_ID + " = ?";
String[] selection = new String[] { String.valueOf(1) };
Cursor c = getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, projection, where, selection, null);
c.moveToFirst();
for(int i=0;i<c.getCount();i++)
{
Log.e("id",""+c.getString(0));
c.moveToNext();
}
ContentValues values = new ContentValues();
values.clear();
values.put(ContactsContract.RawContacts._ID , 0);
getContentResolver().update(ContactsContract.RawContacts.CONTENT_URI, values,ContactsContract.RawContacts._ID + "+ ?",new String[] { String.valueOf(1) });
所属していません StackOverflow