Как обновить все поля, используя ContactsContract - PullRequest
0 голосов
/ 06 марта 2012

У меня есть вопрос.

В моем приложении конечный пользователь введет имя пользователя, адрес электронной почты и город. Теперь, если электронная почта, введенная пользователем, существует, тогда должен выполняться запрос на обновление. И поле имени пользователя и города должно обновляться в его мобильном телефоне. А если адрес электронной почты не существует, то должен быть создан новый контакт.

Теперь я могу создать новую запись, но каким-то образом запрос на обновление не работает должным образом. Может быть, я совершаю ошибку.

Нужна помощь.

Я публикую свой код 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();
}

Ответы [ 2 ]

0 голосов
/ 16 марта 2012

Здесь выкладываю код для метода обновления, измените его в соответствии с вашими требованиями.

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 голосов
/ 06 марта 2012
//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);
            }
        }
    }
...