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

现在试试,

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();
        }

从您的数据库查询中您只选择类别列,因此光标中只有一列结果,并且它以 0 索引开始。所以c.getString(1)toc.getString(4)意义不大。如果您从表中选择所有数据,那么只有您获得所有列..

于 2012-06-07T06:50:13.207 回答
1

我看到了您的问题,您只返回一列 ( category),但您正在尝试访问几个不同的列。

您应该返回至少五个(因为您尝试访问最多 4 个并且游标列从 0 开始)。

如果您尝试提取具有特定类别的项目列表,则需要更改查询。像这样的东西:

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

这将选择具有与变量中包含的任何内容匹配的类别的所有项目category,并返回该行中的所有线圈。

于 2012-06-07T06:54:05.227 回答