4

最近、アプリ用の同期アダプターを作成しました。これにより、Webリクエストを介して取得した連絡先が電話の連絡先と同期されます。連絡先の追加に問題はありませんが、連絡先情報が変更されたときに連絡先情報を正しく更新することができません。たとえば、連絡先の[会社名]フィールド。これが私が試したクエリの例ですが、機能しなかったか、部分的にしか機能しませんでした(つまり、一部の連絡先は更新されましたが、正しくありません)。

        ContentValues values = new ContentValues();
    values.put(ContactsContract.CommonDataKinds.Organization.COMPANY, "New Company");
context.getContentResolver().update(Uri.parse("content://com.android.contacts/data/"), values, BaseColumns._ID + "=?", new String[] { String.valueOf(id) } );

また、Androidのドキュメントで提案されているように、これをバッチで実行してみました。

    builder = ContentProviderOperation
            .newUpdate(ContactsContract.Data.CONTENT_URI);
    builder.withSelection(BaseColumns._ID + " =?", new String[]{String.valueOf(id)});

    builder.withValue(
            ContactsContract.CommonDataKinds.Organization.COMPANY,
            "New Company Name!");
    operationList.add(builder.build());

私はContactContractsのドキュメントを読み、もともとこのチュートリアルに従っていました。AuthenticatorActivityまた、APIの例をチェックインしても役に立ちませんでした。どんな助けでも大歓迎です。

4

1 に答える 1

9

正しい質問を見つけようとかなりの時間を費やした後、私は答えを見つけたと思います。を変更する必要があるようです。BaseColumns._ID更新ContactsContract.Data.CONTACT_IDするたびに、mimeタイプも指定する必要がありました。また、Androidのドキュメントのどこにもこれが表示されていませんでした。この記事には多くの助けがありました: Androidの連絡先の操作

        String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
    String[] orgWhereParams = new String[]{String.valueOf(id), 
        ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE}; 
    operationList
    .add(ContentProviderOperation
            .newUpdate(ContactsContract.Data.CONTENT_URI)
            .withSelection(orgWhere, orgWhereParams)
            .withValue(
                    ContactsContract.CommonDataKinds.Organization.DATA,
                    guCon.getCompany()).build());
于 2011-04-07T18:33:35.527 に答える