2012-02-17 12 views
0

私は特定の人の連絡先を更新したいアプリケーションに取り組んでいます。連絡先の名前と姓のみを更新すると、正常に機能しますが、電子メールアドレス、番号、郵便アドレスなどの連絡先の詳細をすべて更新します。連絡先の詳細を更新するandroid

私に役立つリンクを教えてください。前もって感謝します。

答えて

3

各フィールド(電子メール、名前、アドレス)にはMIMEタイプがあります。フィールドを更新するには、 を使用する必要があります。

たとえば、メールを更新しようとします。

まず、更新したい詳細を見つける必要があります。 データテーブルで作業します。各Data.RAW_CONTACT_IDは、連絡先の詳細 を表しています。

したがって、Data.RAW_CONTACT_IDを見つける必要があります。ここで、idは で編集する連絡先のIDです。

メール(Email.CONTENT_ITEM_TYPE)のMIMEタイプ(詳細を表す特定の行)を見つける必要があります。

電子メールのデータはEmail.DATA列に保存されます。そこに新しい電子メールを入れます。

あなたが特定の電子メールの種類をしたい場合は、クエリに追加する必要があります:あなたは家庭の電子メールを追加したい場合は例えば 、あなたはクエリにEmail.TYPE_HOME を追加する必要があります。

次に、クエリを作成して最後に変更を適用します。

はここexamleです:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

    String emailParams = Data.RAW_CONTACT_ID + " = ? AND " + Data.MIMETYPE + " = ?"; 
    String[] emailParamsWhere = new String[] { "contact_id", Email.CONTENT_ITEM_TYPE }; 

    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI).withSelection(emailParams, emailParamsWhere).withValue(Email.DATA, "new email").withValue(Email.TYPE, Email.TYPE_HOME) 
      .build()); 

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

     if (res != null) 
     { 
      return true; 
     } 

     return false; 
    } 

    catch (RemoteException e) 
    { 
     Log.d(TAG, e.getMessage()); 
     e.printStackTrace(); 
    } 

    catch (OperationApplicationException e) 
    { 
     Log.d(TAG, e.getMessage()); 
     e.printStackTrace(); 
    } 

携帯電話を更新するために、このクエリを使用します。

 String phoneParams = Data.RAW_CONTACT_ID + " = ? AND " + Data.MIMETYPE + " = ? AND " + Phone.TYPE + " = " + Phone.TYPE_MOBILE; 
     String[] phoneParamsWhere = new String[] { "contact_id", Phone.CONTENT_ITEM_TYPE }; 

     ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI).withSelection(phoneParams, phoneParamsWhere).withValue(Phone.NUMBER, "mobile_number") 
       .withValue(Phone.TYPE, Phone.TYPE_MOBILE).build()); 

は、私はあなたのコードを共有するための

+0

感謝を助けたが、私は最初の接触でこれを使用する場合ホープ電子メールの種類が不明な種類に変更された場合より姓の更新があります。私はアンドロイドのコンタクトAPIと同じようにコンタクト全体の詳細を更新したい。 – Jitendra

+0

私が掲示したモバイル番号の例のように、クエリの最後にwithValue(Email.TYPE、Email.TYPE_HOME)(または好きな任意のタイプ)を追加するだけです。私は答えを更新しました。 – dor506

+0

ありがとうございました。あなたは私に一つのことを教えてくれますか?ユーザーが電子メールアドレスを挿入しなかったとしますが、更新時に電子メールアドレスを挿入または更新したい場合、どのように処理するのですか? plzヘルプ... – Jitendra

関連する問題