2017-01-31 7 views
0

私はアンドロイドの新機能です。連絡先を編集できるアプリがあります。そして、私は私の連絡先を持っているそのアプリケーションでは、問題は私が私の連絡先のuriを取得して、それを編集しようとするとき、それは常にlogcatにエラーを表示します。私は次のコードを使用していますが、アンドロイドでaction_editインテントを使用して連絡先を編集する方法は?

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$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) 
+0

どこでyを終了しましたか私たちのカーソル? – Yupi

答えて

1

データ読み込み時に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)); 
} 
+0

あなたの答えはありがたいですが、ボタンをクリックしてaction_editの連絡先を開くだけです – Secret

関連する問題