2

次のコードを使用して、特定の連絡先の複数の電話番号を更新しようとしています:

for(int j=0;j<allPhoneNumbersLength;j++)
{
PhoneInfo phoneInfo = (PhoneInfo) allPhoneNumbers.elementAt(j);
String phoneValue = phoneInfo.getValue();
int phoneType = phoneInfo.getIndex(); // phoneType = Phone.TYPE_HOME,  Phone.TYPE_WORK, etc
ContentProviderOperation.Builder builderPhone = ContentProviderOperation.newUpdate(Data.CONTENT_URI)
.withSelection(ContactsContract.Data.CONTACT_ID + "=?"+" AND "+ContactsContract.Data.MIMETYPE + "=?" + " AND "+Phone.TYPE+"=?",  new String[]{String.valueOf(contactID), Phone.CONTENT_ITEM_TYPE, String.valueOf(phoneType)});
if(phoneType == Phone.TYPE_HOME)
{
builderPhone.withValue(Phone.NUMBER, phoneValue)
.withValue(Phone.TYPE, Phone.TYPE_HOME);
}
else if(phoneType == Phone.TYPE_WORK)
{
builderPhone.withValue(Phone.NUMBER, phoneValue)
.withValue(Phone.TYPE, Phone.TYPE_WORK);
}
else if(phoneType == Phone.TYPE_FAX_HOME)
{
builderPhone.withValue(Phone.NUMBER, phoneValue)
.withValue(Phone.TYPE, Phone.TYPE_FAX_HOME);
}
op_list.add(builderPhone.build());

}
getContentResolver().applyBatch(ContactsContract.AUTHORITY, op_list);

このコードを使用して 3 つの番号を更新しようとしていますが、「TYPE_FAX_HOME」番号のみが更新され、他の 2 つの番号は連絡先から削除されます。

私を助けてください。

4

4 に答える 4

2

私はあなたのコードから、3 つのタイプすべてに同じ電話番号の値を使用していることを知りました。したがって、表示中、アンドロイドは連絡先に対してそれらのうちの1つだけを表示します。しかし、実際に連絡先を編集すると、3 つのタイプすべてに同じ番号が入力されていることがわかります。

PS: 編集しようとしている連絡先には、3 つのタイプすべての番号が既に入力されていると想定しています。そうでない場合は、それらを作成してから、コードを実行してみてください。

于 2013-02-09T05:52:55.077 に答える
0

Android エミュレータの問題。コードは実際のデバイスで正常に動作します。ご助力いただきありがとうございます。

于 2013-02-12T04:27:59.140 に答える
0

わお ... !なぜ「if」ステートメントを使用するのですか?! あなたのコードは次のようになります:

for(int j=0;j<allPhoneNumbersLength;j++)
{
    PhoneInfo phoneInfo = (PhoneInfo) allPhoneNumbers.elementAt(j);
    int phoneType = phoneInfo.getIndex(); // phoneType = Phone.TYPE_HOME,  Phone.TYPE_WORK, etc
    ContentProviderOperation.Builder builderPhone = ContentProviderOperation.newUpdate(Data.CONTENT_URI)
        .withSelection(ContactsContract.Data.CONTACT_ID + "=?"+" AND "+ContactsContract.Data.MIMETYPE + "=?" + " AND "+Phone.TYPE+"=?",  new String[]{String.valueOf(contactID), Phone.CONTENT_ITEM_TYPE, String.valueOf(phoneType)});
    builderPhone.withValue(Phone.NUMBER, phoneValue)
        .withValue(Phone.TYPE, phoneType);
    op_list.add(builderPhone.build());
}
getContentResolver().applyBatch(ContactsContract.AUTHORITY, op_list);
于 2013-02-09T05:43:13.957 に答える
0

私は Android プログラマーではありませんが、問題はコードの最後の行にあると思います。ループは各ステップで連絡先情報を更新しますが、適用しません。ループの最後のステップで更新を適用し、最後の変更を適用する必要があります。このようにコードを変更すると、うまくいくはずです。つまり、ループのステップごとに連絡先情報が更新されます。

for(int j=0;j<allPhoneNumbersLength;j++)
{
    PhoneInfo phoneInfo = (PhoneInfo) allPhoneNumbers.elementAt(j);
    int phoneType = phoneInfo.getIndex(); // phoneType = Phone.TYPE_HOME,  Phone.TYPE_WORK, etc
    ContentProviderOperation.Builder builderPhone = ContentProviderOperation.newUpdate(Data.CONTENT_URI)
        .withSelection(ContactsContract.Data.CONTACT_ID + "=?"+" AND "+ContactsContract.Data.MIMETYPE + "=?" + " AND "+Phone.TYPE+"=?",  new String[]{String.valueOf(contactID), Phone.CONTENT_ITEM_TYPE, String.valueOf(phoneType)});
    builderPhone.withValue(Phone.NUMBER, phoneValue)
        .withValue(Phone.TYPE, phoneType);
    op_list.add(builderPhone.build());
    getContentResolver().applyBatch(ContactsContract.AUTHORITY, op_list);
}
于 2013-02-09T06:21:11.270 に答える