2012-03-28 67 views
0

我仍在使用電話簿應用程序,並且想要更新存儲在電話簿中的聯繫人。我可以插入新的聯繫人,但更新完全沒有效果。Android - 更新電話簿中的聯繫人

這裏是我使用的代碼:

public void update(Relation r) 
{ 
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

    // Name 
    Builder builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
    builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, r.getBook_id()); 
    builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); 
    builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, r.getFirstName()+ " " +r.getLastName()); 
    ops.add(builder.build()); 

    // Number 
    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
    builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, r.getBook_id()); 
    builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
    builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, r.getNumber()); 
    builder.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK); 
    ops.add(builder.build()); 

    // Picture 
    try 
    { 
     Bitmap bitmap = MediaStore.Images.Media.getBitmap(MyApplication.getInstance().getContentResolver(), Uri.parse(r.getPhoto())); 
     ByteArrayOutputStream image = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG , 100, image); 
     builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
     builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, r.getBook_id()); 
     builder.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE); 
     builder.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, image.toByteArray()); 
     ops.add(builder.build()); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    // Update 
    try 
    { 
     MyApplication.getInstance().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

上面的一個不工作,但此人做(插入):

public void insert(Relation r) 
{ 
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
    int rawContactInsertIndex = ops.size(); 

    Builder builder = ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI); 
    builder.withValue(RawContacts.ACCOUNT_TYPE, null); 
    builder.withValue(RawContacts.ACCOUNT_NAME, null); 
    ops.add(builder.build()); 

    // Name 
    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
    builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex); 
    builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); 
    builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, r.getFirstName()+ " " +r.getLastName()); 
    ops.add(builder.build()); 

    // Number 
    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
    builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex); 
    builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
    builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, r.getNumber()); 
    builder.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK); 
    ops.add(builder.build()); 

    // Picture 
    try 
    { 
     Bitmap bitmap = MediaStore.Images.Media.getBitmap(MyApplication.getInstance().getContentResolver(), Uri.parse(r.getPhoto())); 
     ByteArrayOutputStream image = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG , 100, image); 
     builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
     builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex); 
     builder.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE); 
     builder.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, image.toByteArray()); 
     ops.add(builder.build()); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    // Add the new contact 
    ContentProviderResult[] res; 
    try 
    { 
     res = MyApplication.getInstance().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
     if (res != null && res[0] != null) 
     { 
      String uri = res[0].uri.getPath().substring(14); 
      r.setBook_id(new Integer(uri).intValue()); 
     } 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

你能告訴我,如果我這樣做在好還是不好?

謝謝。

問候。

V.

+0

解決。上面的代碼是正確的。這是一個數據庫錯誤。 – Manitoba 2012-03-28 09:46:05

回答

0

已解決。檢查前一條消息。

0

爲什麼在更新方法中使用newInsert?爲什麼不newUpdate?也許這是一個錯誤。請再次檢查您的代碼,我想引用您的代碼。

我有一個聯繫人的更新名稱相同的問題,雖然它不會拋出任何異常,我找不到從哪裏來的問題。

+0

解決。請參閱此鏈接:http://stackoverflow.com/a/9924883/1064858 – qmn1711 2012-07-12 07:59:05

相關問題