首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ContactsContract更新所有字段

如何使用ContactsContract更新所有字段
EN

Stack Overflow用户
提问于 2012-03-06 19:11:02
回答 2查看 1.2K关注 0票数 0

我有个问题。

在我的应用程序中,最终用户将输入用户名、电子邮件地址和城市。现在,如果用户输入的电子邮件存在,则应该运行更新查询。字段用户名和城市应该在他的手机里更新。如果该电子邮件不存在,则应创建一个新的联系人。

现在我可以创建一个新条目,但不知何故更新查询不能正常工作。也许我犯了个大错。

需要帮助。

我正在发布我的createContact和updateContact代码。Create contact工作正常。它能够插入新的联系人。

//创建联系人

代码语言:javascript
复制
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());
    }

//更新联系人

代码语言:javascript
复制
   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();
}
EN

回答 2

Stack Overflow用户

发布于 2012-03-06 19:19:29

代码语言:javascript
复制
//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
EN

Stack Overflow用户

发布于 2012-03-16 15:03:03

我在这里放了update方法的代码,根据你的需要进行修改。

代码语言:javascript
复制
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()) });
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9582475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档