2011-12-30 12 views
0

私は単純な更新のコードを書いています。私のAVDの連絡先からデータを挿入して削除できますが、データを更新したいときは更新しません。ここAndroid:プログラミングで連絡先を更新できない

は私のサンプルコードです:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
      String rawContactInsertIndex = (Integer.toString(ops.size())); 

ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) 
         .withSelection(Data.CONTACT_ID + "=?" , new String[] { rawContactInsertIndex })       
        .withValue(StructuredName.DISPLAY_NAME, firstname) 
        .withValue(StructuredName.FAMILY_NAME, lastname) 
        .withValue(StructuredName.GIVEN_NAME, firstname) 

は、いずれかは助けることができますか?私はここで立ち往生している。起動するには

+0

あなたには、WRITE_CONTACTSのmanifest.xmlにアクセス許可が追加されました\tアプリケーションがユーザーの連絡先データを書き込むことはできますが、読み取ることはできません。 –

+0

ya私が追加しました – shvivek

答えて

1

、あなたの.withSelection(Data.CONTACT_ID + "=?", new String[]{rawContactInsertIndex}Data.CONTACT_ID列に値0を持っているすべてのデータ列を更新を実行しようとしています。これには、電話番号、住所などが含まれます。ロイヤルに連絡するf-ckがあるので、幸いにも、このような連絡先はありません。

開始するには、正しいCONTACT_IDを取得して、選択したもの、つまりData.MIME_TYPEで選択を行う必要があります。

contactId = Fetch the correct row identifier of the contact you want to update. 

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) 
    .withSelection(Data.CONTACT_ID + "=? AND " + Data.MIME_TYPE + "=?", 
     new String[]{contactId, StructuredName.CONTENT_ITEM_TYPE}) 
    .withValue(StructuredName.DISPLAY_NAME, firstName) 
    .withValue(StructuredName.FAMILY_NAME, lastName) 
    .withValue(StructuredName.GIVEN_NAME, givenName).build()); 

また、CONTACT_IDを更新する必要がありますか? RAW_CONTACT_IDの使用を検討してください。

+0

jenとしてiamとしてありがとうありがとうstackoverflow – shvivek

関連する問題