Исключение при получении значений столбца определенной строки по row_Id SQLite - PullRequest
0 голосов
/ 24 октября 2011

Я делаю базу данных с четырьмя столбцами.

  @Override
  public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE contacts (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT, type TEXT);");
  }

Теперь у меня есть _id определенной строки, и я пытаюсь получить значения столбца (четыре значения столбца) этой конкретной строки. Мой код выглядит следующим образом.

 public Cursor getById(String id) {

    String[] args = { id };
    return (getReadableDatabase().rawQuery("SELECT _id, name, email, type FROM contacts WHERE _id=?", args));
 }

 Cursor c = getById(row_id);
 String name = c.getString(1);

Это следующее исключение.

Uncaught handler: thread main exiting due to uncaught exception
android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
at com.app.friendlist.FriendList$2.onItemClick(FriendList.java:109)
at android.widget.AdapterView.performItemClick(AdapterView.java:284)
at android.widget.ListView.performItemClick(ListView.java:3285)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)

Пожалуйста, помогите и предложите, где проблема. Благодаря.

1 Ответ

3 голосов
/ 24 октября 2011

Вы должны использовать это так -

 Cursor c = getById(row_id);
 if(c.getCount()>0)
 {
     c.moveToFirst();
     String name = c.getString(1);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...