0

私は食べ物と呼ばれるテーブルを持っています。食品の「カテゴリ」を選択していて、それをリスト ビューで表示したいと考えています。これは私が試したコードです。

Cursor c = db.query(DATABASE_TABLE,
                new String[] { "category" }, null, null, null, null, null);
        ArrayList<ArrayList<String>> results = new ArrayList<ArrayList<String>>();           
        if(c.moveToFirst())
        {
            do
            {   ArrayList<String> recipe = new ArrayList<String>();
                recipe.add(c.getString(1));
                recipe.add(c.getString(2));
                recipe.add(c.getString(3));
                recipe.add(c.getString(4));
                results.add(recipe);
            }while(c.moveToNext());
            if(c != null && !c.isClosed())
               c.close();
        }
4

2 に答える 2

1

問題が発生しました。1 つの列 ( ) しか返さcategoryれていませんが、複数の異なる列にアクセスしようとしています。

少なくとも 5 つを返す必要があります (最大 4 つにアクセスしようとしていて、カーソル列が 0 から始まるため)。

特定のカテゴリのアイテムのリストを取得しようとしている場合は、クエリを変更する必要があります。このようなもの:

String query = "SELECT * FROM " + DATABASE_TABLE + " WHERE category = " + category;
return mDb.rawQuery(query, null);

これにより、変数に含まれるものに一致するカテゴリを持つすべてのアイテムが選択さcategoryれ、行内のすべてのコイルムが返されます。

于 2012-06-07T06:54:05.227 に答える
1

今すぐやってみて下さい、

Cursor c = db.query(DATABASE_TABLE,
                new String[] { "category" }, null, null, null, null, null);
        ArrayList<String> results = new ArrayList<String>();           
        if(c.moveToFirst())
        {
            do
            {   
             results.add(c.getString(0)); // instead of 0 Index of Category column in your case
            }while(c.moveToNext());
            if(c != null && !c.isClosed())
               c.close();
        }

データベースクエリからカテゴリ列のみを選択しているため、カーソルの結果は1列のみで、インデックスは0で始まります。だからc.getString(1)toc.getString(4)は少ないという意味です。テーブルからすべてのデータを選択すると、すべての列のみが取得されます..

于 2012-06-07T06:50:13.207 に答える