0

このデータベースを含む Android アプリを作成しています。

public void onCreate(SQLiteDatabase db) {
  String sql = "CREATE TABLE IF NOT EXISTS snacks (" +
                "_id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
                "name TEXT, " +
                "disc TEXT, " +
                "photo TEXT, " +
                "thumb TEXT, " +
                "ingre TEXT, " +
                "howto TEXT, " +
                "info TEXT, " +
                "snackId INTEGER)";
    db.execSQL(sql);

    ContentValues values = new ContentValues();

    values.put("name", "Name 1");
    values.put("disc", "here is the description");
    values.put("photo", "stub.png");
    values.put("thumb", "stub.png");
    values.put("ingre", "the ingredients of the snack");
    values.put("howto", "how to make this thing");
    values.put("info", "basically its this much calorie and such and such");
    db.insert("snacks", "name", values);...............etc etc ......`

アクティビティの 1 つに、データベースを照会できる検索バーがあります。結果はリストビューに表示されます。リスト内の 1 つの項目をクリックすると、写真を含む詳細が表示されます。私の写真は Assets フォルダーにあります。アセット フォルダから写真を取得し、そのサムネイルを表示したいと考えています。アセットマネージャをこんな風に使ってみた

public void search(View view) {
  cursor = db.rawQuery("SELECT _id, name, disc, thumb FROM snacks WHERE name LIKE ?", new String[]{"%" + searchText.getText().toString() + "%"});

  adapter = new SimpleCursorAdapter(
  this, 
  R.layout.cook_tab_snackslist, 
  cursor, 
  new String[] {"name", "disc"},        
  new int[] {R.id.name, R.id.disc});

  Thumb = (ImageView) findViewById(R.id.thumb);
  try {
   InputStream bitmap=getAssets().open(cursor.getString(cursor.getColumnIndexOrThrow("thumb")));
   Bitmap bit=BitmapFactory.decodeStream(bitmap);
   Thumb.setImageBitmap(bit);
  } catch (IOException e1) {
     e1.printStackTrace();
  }
  setListAdapter(adapter);
}

これが正しくないことに気付き、次のエラーが表示されます。

android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 7

私に何ができる?私はこれを正しい方法で行っていますか?

4

1 に答える 1

1

クエリを作成した後に次の行を追加します (カーソルがnullでないことを確認する前にも確認する必要があります)。

cursor.moveToFirst();
于 2012-02-16T19:41:43.913 に答える