0

I have a question.

In my application, the end user will enter uername, email and city. Now if the email entered by the user exists, then the update query should run. And the field username and the city should get updated in his cell phone. And if the email does not exists, then a new contact should be created.

Now I am able to create a new entry but somehow the update query is not working properly. May be I am doing a blunder.

Need help.

I am posting my createContact and updateContact code. Create contact is working fine. It is able to insert a new contact.

// create contact

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());
    }

// update Contact

   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();
}
android developer
  • 1,253
  • 2
  • 13
  • 43

2 Answers2

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);
            }
        }
    }
Pradeep Sodhi
  • 2,135
  • 1
  • 19
  • 19
  • I am checking your code.. But I need to put a check... of whether the phone number exists or not. And if the phone number exists, then that entry should be updated – android developer Mar 06 '12 at 11:44
-1

Here am putting the code for update method, Change this according to your requirement.

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()) });
}
wolverine
  • 1,665
  • 5
  • 24
  • 43