如何在 android 中使用 action_edit 意图编辑联系人?

how to edit contact using action_edit intent in android?

我是 android.I 的新手,有一个允许用户编辑联系人的应用程序。在那个应用程序中,我有我的联系方式,问题是当我尝试编辑它时,通过检索我的联系方式的 uri,它总是在 logcat.I 中显示错误,我正在使用以下代码,但它不起作用。

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 是.....

  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.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)

读取数据时不要忘记移动Cursor

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

或者,如果假设只有一个条目,

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