1

我想通過我的應用程序編輯我的聯繫人列表。我可以更新聯繫人姓名,電話號碼和電子郵件。但是,當我嘗試更改現有照片時,它並未更新。Android:更新extricting聯繫人列表

當我嘗試當我嘗試用圖片編輯現有的聯繫,我使用了更新聯繫人

ContentResolver contentResolver = getContentResolver(); 

      String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 

      String[] emailParams = new String[]{idValue, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE}; 
      String[] nameParams = new String[]{idValue, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE}; 
      String[] numberParams = new String[]{idValue, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE}; 
      int photoRow = -1; 
      String wherePhoto = ContactsContract.Data.RAW_CONTACT_ID + " = " + idValue + " AND " + ContactsContract.Data.MIMETYPE + " =='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'"; 
      Cursor cursor = contentResolver.query(ContactsContract.Data.CONTENT_URI, null, wherePhoto, null, null); 
      int idIdx = cursor.getColumnIndexOrThrow(ContactsContract.Data._ID); 
      if (cursor.moveToFirst()) { 
       photoRow = cursor.getInt(idIdx); 
      } 

      ArrayList<android.content.ContentProviderOperation> ops = new ArrayList<android.content.ContentProviderOperation>(); 


     ops.add(android.content.ContentProviderOperation.newUpdate(android.provider.ContactsContract.Data.CONTENT_URI) 
        .withSelection(where,emailParams) 
        .withValue(ContactsContract.CommonDataKinds.Email.DATA, edt_contactEmail.getText().toString().trim()) 
        .build()); 



      ops.add(android.content.ContentProviderOperation.newUpdate(android.provider.ContactsContract.Data.CONTENT_URI) 
        .withSelection(where,nameParams) 
        .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, edt_contact_name.getText().toString().trim()) 
        .build()); 


      ops.add(android.content.ContentProviderOperation.newUpdate(android.provider.ContactsContract.Data.CONTENT_URI) 
        .withSelection(where,numberParams) 
        .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, edt_contactNumber.getText().toString().trim()) 
        .build()); 

      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      if(contact_bitmap!=null){ // If an image is selected successfully 

       contact_bitmap.compress(Bitmap.CompressFormat.JPEG, 80, stream); 
       byte[] b = stream.toByteArray(); 

       ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) 
         .withSelection(ContactsContract.Data._ID + " = ?", new String[]{Integer.toString(photoRow)}) 
         .withValue(ContactsContract.Data.RAW_CONTACT_ID, idValue) 
         .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1) 
         .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE) 
         .withValue(ContactsContract.Data.DATA15, b) 
         .build()); 

       try { 
        stream.flush(); 
       }catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 


      try { 
       contentResolver.applyBatch(ContactsContract.AUTHORITY, ops); 
       Toast.makeText(EditContacts.this,"Contact Successfully updated",Toast.LENGTH_LONG).show(); 
       Intent i = new Intent(EditContacts.this,MainActivity.class); 
       finish(); 
       startActivity(i); 

      } catch (RemoteException e) { 
       e.printStackTrace(); 
      } catch (OperationApplicationException e) { 
       e.printStackTrace(); 
      } 
     } 

代碼添加它成功添加

形象新聯繫人

問題發生

任何人都可以告訴我如何編輯與圖像的現有聯繫人。

在此先感謝:)

回答

1

我已經使用此示例更新聯繫人。 ContactManager

方法更新聯繫人:

boolean updateContact(String contactID, String contactName, String contactNumber, String contactEmailAdd, Bitmap bitmap) { 
     ArrayList<ContentProviderOperation> ops = new ArrayList<>(); 
     ops.add(ContentProviderOperation 
       .newUpdate(ContactsContract.Data.CONTENT_URI) 
       .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE 
         + "=?", new String[]{contactID, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE}) 
       .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contactName) 
       .build()); 

     ops.add(ContentProviderOperation 
       .newUpdate(ContactsContract.Data.CONTENT_URI) 
       .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE 
         + "=? AND " + ContactsContract.CommonDataKinds.Organization.TYPE + "=?" 
         , new String[]{contactID, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE 
         , String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)}) 
       .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, contactNumber) 
       .build()); 
     ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) 
       .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE 
         + "=? AND " + ContactsContract.CommonDataKinds.Organization.TYPE + "=?" 
         , new String[]{contactID, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE 
         , String.valueOf(Email.TYPE_WORK)}) 
       .withValue(Email.ADDRESS, contactEmailAdd) 
       .build()); 
     try { 
      ByteArrayOutputStream image = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.PNG, 100, image); 

      ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) 
        .withSelection(ContactsContract.Data.CONTACT_ID + "=? AND " + 
          ContactsContract.Data.MIMETYPE + "=?", new String[]{contactID, Photo.CONTENT_ITEM_TYPE}) 
        .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1) 
        .withValue(Photo.PHOTO, image.toByteArray()) 
        .build()); 

      /*Builder builder; 
      builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI); 
      builder.withSelection(ContactsContract.Data.CONTACT_ID + "=?" + " AND " + ContactsContract.Data.MIMETYPE + "=?", 
        new String[]{contactID, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE}); 
      builder.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, image.toByteArray()); 
      ops.add(builder.build());*/ 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     try { 
      getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } 
     return true; 
    } 
+0

我試着給你的方法,但在執行我得到一個錯誤 「JavaBinder:!!! FAILED BINDER TRANSACTION !!!」 @ activesince93 –

+0

希望這有助於:[失敗的活頁夾事務](http://stackoverflow.com/a/18476263/3110234) – activesince93

+0

我們已經壓縮位圖100 @activesince93 –