0

Android アプリケーションで SQLite を使用しています。これは、4 つの列を持つテーブルで構成されます。最初の列は「id」(整数) で、最後の列は AppName (文字列) です。特定の ID を指定してデータベースから値を取得しようとすると、正常に実行されます。ただし、AppName を指定してデータベースから値を取得しようとすると、機能せず、例外が発生します。

以下は、例外が発生する 2 番目のケースで使用する関数のコードです。

@Override
public NameVO getAppInfo(String appName) {
     SQLiteDatabase db = this.getReadableDatabase();
      Cursor cursor = db.query(TABLE_NAME, new String[] { KEY_ID,
              KEY_ENERGY, KEY_CPU, KEY_APPNAME }, KEY_APPNAME + "=?",
        new String[] {appName} , null, null, null, null);
      if (cursor != null)
       cursor.moveToFirst();
      NameVO nameVO = new NameVO(Integer.parseInt(cursor.getString(0)),
        cursor.getString(1), cursor.getString(2), cursor.getString(3));
      // return nameVO
      return nameVO;
}

私が得る例外は次のとおりです。

E/AndroidRuntime(14852): android.database.CursorIndexOutOfBoundsException: サイズ 0 のインデックス 0 が要求されました

これを機能させる方法はありますか?

前もって感謝します

4

1 に答える 1

2

おそらく空のカーソルが表示されます。これを使ってみてください

if(cursor != null) {
 if(cursor.moveToFirst()) {
  NameVO nameVO = new NameVO(Integer.parseInt(cursor.getString(0)),
    cursor.getString(1), cursor.getString(2), cursor.getString(3));
  // return nameVO
  return nameVO;
 }
}
return null;

編集:

すべての NameVo を取得したい場合は、これを試してください

List<NameVO> name_list= new ArrayList<NameVO();
if(cursor != null) {
 if(cursor.moveToFirst()) {
  do {
        NameVO nameVO = new NameVO(Integer.parseInt(cursor.getString(0)),
          cursor.getString(1), cursor.getString(2), cursor.getString(3));
        name_list.add(nameVO);
     }
  while(cursor.moveToNext());

 }
 return name_list;
}
return null;
于 2013-06-18T15:01:44.113 に答える