2012-02-17 8 views
0

このコードではエラーが発生していますが、連絡先をデータベースに保存する方法はわかっています。私がcdata/cdata2を取り出して文字列を置くとうまく動作するからです。どんな助けもありがとう。アプリケーションデータベースに連絡先を保存するCursorIndexOutOfBoundsException

連絡先から文字列を受け入れるように変換するにはどうすればよいですか?

switch (item.getItemId()) { 

    case 1: 
     //Save current contact to stash database 
     Cursor phones2 = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null, null); 
     String cdata = phones2.getString(phones2.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
     String cdata2 = phones2.getString(phones2.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     ContentValues values=new ContentValues(2);   
     values.put(DatabaseHelper.NAME, cdata); 
     values.put(DatabaseHelper.cALUE, cdata2); 
     db.getWritableDatabase().insert("constants", DatabaseHelper.NAME, values); 
     constantsCursor.requery();    
     //Refresh contact list 
     Intent refresh = new Intent(this, MainTab.class); 
     startActivity(refresh); 
     this.finish(); 

     return(true); 
     case 2: 
      //uncoded option 
      Toast.makeText(this, "here is the info", Toast.LENGTH_SHORT).show(); 
    } 

ERROR: android.database.CursorIndexOutOfBoundsException:インデックス-1要求され、あなたがCursor.moveToFirst()を呼び出すのを忘れて2

答えて

2

の大きさで、これはカーソルを呼び出すことなく、への準備ができません。読んでください。

はいこの

//Save current contact to stash database 
    Cursor phones2 = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null, null); 
    if (phone2.moveToFirst()) { 
    String cdata = phones2.getString(phone ...... 
+0

ようにしてみたが、それは単に「CDATA」文字列は、カーソルの最初の位置を引き出します。リストの位置に合わせる必要があります。 – LuisCamarena

+0

呼び出すことができるカーソルとリストの位置を一致させたい場合はphones2.moveToPosition(int) – iago

関連する問題