Secret
Secret

Reputation: 621

how to edit contact using action_edit intent in android?

I am new in android.I have an app which allows user to edit contacts. And in that app I have Me contact, problem is when I try to edit it, by retrieving uri of me contact, it always show error in logcat.I am using the following code, but it's not working.

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button=(Button)findViewById(R.id.button);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
            Cursor cursor = getApplicationContext().getContentResolver().query(uri, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
            long idContact = cursor.getLong(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
            Intent i = new Intent(Intent.ACTION_EDIT);
            Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, idContact);
            i.setData(contactUri);
            i.putExtra("finishActivityOnSaveCompleted", true);
            startActivity(i);
        }
    });
}

Logcat is.....

  01-31 15:06:48.396 13800-13800/com.example.admin.editaction E/AndroidRuntime: FATAL EXCEPTION: main
                                                                          Process: com.example.admin.editaction, PID: 13800
                                                                          android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 12
                                                                              at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460)
                                                                              at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
                                                                              at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)
                                                                              at android.database.CursorWrapper.getLong(CursorWrapper.java:127)
                                                                              at com.example.admin.editaction.MainActivity$1.onClick(MainActivity.java:29)
                                                                              at android.view.View.performClick(View.java:5207)
                                                                              at android.view.View$PerformClick.run(View.java:21168)
                                                                              at android.os.Handler.handleCallback(Handler.java:746)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                              at android.os.Looper.loop(Looper.java:148)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5443)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

Upvotes: 1

Views: 2424

Answers (1)

Egor
Egor

Reputation: 40193

Don't forget to move the Cursor when reading data:

while (cursor.moveToNext()) {
  long idContact = cursor.getLong(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
}

or, if the assumption is that there's only one entry,

if (cursor.moveToFirst()) {
  long idContact = cursor.getLong(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
}

Upvotes: 3

Related Questions