2012-01-29 9 views
0

連絡先にカスタムフィールドを追加して、連絡先が自分のアプリケーションにマークされているかどうかを通知します。 まず、カスタムデータを指定されたidに接続するように設定する関数を作成したいのですが、使用しようとしているコードが正しく動作しません。Androidの連絡先にカスタムデータを追加する

public static final String    MIMETYPE_EMPLOYEE = "vnd.android.cursor.item/employee"; 
public void addEmployee(String id){ 
      ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
      Uri newContactUri = null; 
      ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) 
         .withSelection(ContactsContract.Data._ID + "=?", new String[]{id}) 
         .withValue(ContactsContract.Data.MIMETYPE, MIMETYPE_EMPLOYEE) 
         .withValue(ContactsContract.Data.DATA1, "yes") 
         .build()); 

      try{ 
       ContentProviderResult[] res = act.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

       if (res!=null && res[0]!=null) { 

        newContactUri = res[0].uri; 
        Log.d(LOG_TAG, "URI added contact:"+ newContactUri); //here it says that it's null :(
       } 
       else Log.e(LOG_TAG, "Contact not added."); 
      } catch (RemoteException e) { 
       // error 
       Log.e(LOG_TAG, "Error (1) adding contact."); 
       newContactUri = null; 
      } catch (OperationApplicationException e) { 
       // error 
       Log.e(LOG_TAG, "Error (2) adding contact."); 
       newContactUri = null; 
      } 
      Log.d(LOG_TAG, "Contact added to system contacts."); 

      if (newContactUri == null) { 
       Log.e(LOG_TAG, "Error creating contact"); 
      } 
     } 

私はまた、代わりに、更新のインサートを使用しようとしましたが、私は取得しようとしたときに挿入して、私のアプリケーションがクラッシュした「newContactUriの= RESを[0] .uri;」 同様のソリューションを検索しましたが、何も私のために働いていませんでした:/

+0

plzこれをカスタム連絡先にお試しください: :[\ [\]をクリックしてください] [1] を[1]:http://stackoverflow.com/questions/6853799/add-a-custom-field-to-a-phone-number/7332858 #7332858 –

答えて

1

MAYUR BHOLAからリンクされたトピックは、 私の問題の作業バージョンを投稿しています。誰かがこれを必要とするかもしれません。

public static final String    MIMETYPE_EMPLOYEE = "vnd.android.cursor.item/employee"; 
    private void updateEmployee(String id, String value){ 
    try { 
     ContentValues values = new ContentValues(); 
     values.put(Data.DATA1, value); 
     int mod = act.getContentResolver().update(
       Data.CONTENT_URI, 
       values, 
       Data.RAW_CONTACT_ID + "=" + id + " AND " 
         + Data.MIMETYPE + "= '" 
         + MIMETYPE_EMPLOYEE + "'", null); 

     if (mod == 0) { 
      values.put(Data.RAW_CONTACT_ID, id); 
      values.put(Data.MIMETYPE, MIMETYPE_EMPLOYEE); 
      act.getContentResolver().insert(Data.CONTENT_URI, values); 
      Log.v(LOG_TAG, "data inserted"); 
     } else { 
      Log.v(LOG_TAG, "data updated"); 
     } 
    } catch (Exception e) { 
     Log.v(LOG_TAG, "failed"); 
    } 
} 
関連する問題