2

次のコードは、連絡先を更新することです。電話番号フィールドを更新することはできますが、連絡先の名前 (コメント行内) を更新しようとしていますが、コードを理解できません。

String new_phoneNumber = update_phonenumber.getText()
                    .toString();
String new_name = update_name.getText().toString();
ContentResolver cr = getContentResolver();

String where = ContactsContract.Data.DISPLAY_NAME
                    + " = ? AND "
                    + ContactsContract.Data.MIMETYPE
                    + " = ? AND "
                    + String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE)
                    + " = ? ";
String[] params = new String[] {
                    get_name,
                    ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
                    String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) };

 Cursor phoneCur = managedQuery(
                    ContactsContract.Data.CONTENT_URI, null, where, params,
                    null);
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

            if ((null == phoneCur)) {
                Toast.makeText(getApplicationContext(), "Empty Contact",
                        Toast.LENGTH_LONG).show();
            } else {
                ops.add(ContentProviderOperation
                        .newUpdate(ContactsContract.Data.CONTENT_URI)
                        .withSelection(where, params)
            .withValue(
                                ContactsContract.CommonDataKinds.Phone.DATA,
                                new_phoneNumber)/***.withValue(
                                ContactsContract.CommonDataKinds.Phone.DATA,
                                new_name)***/
                        .build());
            }

            phoneCur.close();

            try {
                cr.applyBatch(ContactsContract.AUTHORITY, ops);
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (OperationApplicationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            Toast.makeText(getApplicationContext(), "Successfully updated",
                    Toast.LENGTH_LONG).show();
4

2 に答える 2

2

コードに別の ops.add を追加して、次のコードを挿入できます。

ops.add(ContentProviderOperation
                    .newUpdate(ContactsContract.Data.CONTENT_URI)
                    .withSelection(Data.DATA1 + "=?", new String[] {get_name})
                    .withValue(
                            StructuredName.DISPLAY_NAME,
                            new_name)
                    .build());
于 2013-08-06T14:18:26.107 に答える
0

このリンクを参照すると、ContactContract の仕組みが説明されています

http://developer.android.com/guide/topics/providers/contacts-provider.html

各フィールド (電子メール、名前、住所) にはオン MIME タイプがあり、フィールドを更新するために使用する必要があります。

たとえば、メールを更新してみましょう。

まず、更新する詳細を見つける必要があります。各 Data.RAW_CONTACT_ID が連絡先の詳細を表すデータ テーブルを操作します。

そのため、ID が編集する連絡先の ID である Data.RAW_CONTACT_ID を見つける必要があります。

ここで、電子メールの MIME タイプ (詳細を表す特定の行) を見つける必要があります (Email.CONTENT_ITEM_TYPE)。

メールのデータは列 Email.DATA に保存されます - そこに新しいメールを入れます。次にクエリを作成し、最後に変更を適用します。

于 2013-08-06T04:18:52.137 に答える