2012-03-06 9 views
0

質問があります。ContactsContractを使用してすべてのフィールドを更新する方法

私のアプリケーションでは、エンドユーザーはuername、email、およびcityを入力します。 ユーザーが入力した電子メールが存在する場合、更新クエリが実行されます。フィールドのユーザー名と都市は自分の携帯電話で更新されるはずです。電子メールが存在しない場合は、新しい連絡先を作成する必要があります。

新しいエントリを作成できましたが、何らかの理由で更新クエリが正しく機能していません。 私は大失敗をしているかもしれません。

ヘルプが必要です。

私はcreateContactとupdateContactコードを投稿しています。連絡先を作成しても問題ありません。新しい連絡先を挿入することができます。

//接触ここ

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
    ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
     .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
     .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
     .build()); 

    //------------------------------------------------------ Names 

    if(!DisplayName.equals("")) { 
     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
       .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
       .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
       .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, DisplayName) 
       .build()); 
    }      


    if(emailID != null) { 
     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
       .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
       .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) 
       .withValue(ContactsContract.CommonDataKinds.Email.DATA, emailID) 
       .withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK) 
       .build()); 
    } 


    if(!street.equals("") || !city.equals("") || !state.equals("") || !zipcode.equals("")) { 
     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
       .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
       .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
       .withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET, street) 
       .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK) 
       .withValue(ContactsContract.CommonDataKinds.StructuredPostal.CITY, city) 
       .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK) 
       .withValue(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, zipcode) 
       .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK) 
       .withValue(ContactsContract.CommonDataKinds.StructuredPostal.REGION, state) 
       .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK) 
       .build()); 
    } 

//更新の接触

public void updateEmailContact(String fname, String email) { 

    Cursor cur = managedQuery(ContactsContract.Data.CONTENT_URI, null, null, null, null); 

    if ((null == cur) || (!cur.moveToFirst())); 

    Log.i("Test", "----------------------Cursor Count----------------------" + cur.getCount()); 

    if(cur != null) { 

     if(cur.moveToFirst()) { 

      do { 

       String raw_contact_id = cur.getString(cur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID)); 

       String where = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " + 
           ContactsContract.Data.MIMETYPE + " = ? AND " + 
           String.valueOf(ContactsContract.CommonDataKinds.Email.TYPE) + " = ?"; 
       String[] params = new String[]{raw_contact_id, 
               ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE, 
               String.valueOf(ContactsContract.CommonDataKinds.Email.TYPE_WORK)}; 

       Cursor emailCur = managedQuery(ContactsContract.Data.CONTENT_URI, null, where, params, null); 

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

       Log.i("Test", "--------Email Count---------------" + emailCur.getCount()); 

       if ((null == emailCur) || (!emailCur.moveToFirst())) 
       { 
       } 
       else 
       { 
         String emailAddress = emailCur.getString( 
           emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
         String email_name = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME)); 


         Log.i("Test", "------------------emailAddress----------------" + emailAddress + " " + email_name); 

         Log.i("Test", "-------------------fname----------------------" + fname_edit.getText().toString().trim()); 


         if(emailAddress.equalsIgnoreCase(email)) { 

          ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI) 
            .withSelection(CommonDataKinds.StructuredName.DISPLAY_NAME + "=?", new String[] {"Krishna"}) 
            .withValue(CommonDataKinds.StructuredName.DISPLAY_NAME, fname_edit.getText().toString().trim()) 
            .build()); 
         try { 
          getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
         } catch (RemoteException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } catch (OperationApplicationException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
          //return true; 

         } else { 


         } 

       } 

       try { 
        getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

        Toast.makeText(getBaseContext(), "Contact Updated.....!!!!", Toast.LENGTH_LONG).show(); 
       } catch (RemoteException e) { 
        e.printStackTrace(); 
       } catch (OperationApplicationException e) { 
        e.printStackTrace(); 
       } 

       emailCur.close(); 
      }while(cur.moveToNext()); 
     } 

    } 

    cur.close(); 
} 

答えて

0
//insert or update 

Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT); 
       intent.setType(ContactsContract.Contacts.CONTENT_TYPE); 

       intent.putExtra(ContactsContract.Intents.Insert.NAME, fullname); 
intent.putExtra(ContactsContract.Intents.Insert.PHONE,phnumber); 

       intent.putExtra(ContactsContract.Intents.Insert.EMAIL, email); 
       intent.putExtra(ContactsContract.Intents.Insert.NOTES, 
         "Imported from moodle"); 
       intent.putExtra(ContactsContract.Intents.Insert.POSTAL, city 
         + " " + country); 

       startActivityForResult(intent, 1); 



protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK) { 
      switch (requestCode) { 
      case 1: 
       if (requestCode == 1) { 

       } 
       super.onActivityResult(requestCode, resultCode, data); 
      } 
     } 
    } 
+0

私はあなたのコードをチェックしています。しかし、電話番号の有無をチェックする必要があります。電話番号が存在する場合は、そのエントリを更新する必要があります –

+0

私の更新方法はどこが間違っていますか? –

+0

私はIntentによってそれをやりたいとは思わない... –

-1

を作成するには、あなたの条件に応じてこれを変更し、更新メソッドのコードを入れています。

public int updateContact(Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, contact.getName()); 
    values.put(KEY_PH_NO, contact.getPhoneNumber()); 

    // updating row 
    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?", 
      new String[] { String.valueOf(contact.getID()) }); 
} 
+0

質問は、カスタムデータベースではなくContactsProviderに関するものです。 – Roel

関連する問題