Reputation: 621
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
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