我有一张叫做食物的桌子。我正在选择食品的“类别”,我想在列表视图中显示它。这是我试过的代码。
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();
}
答案 0 :(得分: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)
到c.getString(4)
意义较小。如果您从表中选择所有数据,那么只有您获得所有列..
答案 1 :(得分:1)
我看到了您的问题,您只返回一列(category
),但您正在尝试访问多个不同的列。
你应该至少返回五个(因为你试图访问最多4个,光标列从0开始)。
如果您要尝试提取某个类别的项目列表,则需要更改查询。有点像这样:
String query = "SELECT * FROM " + DATABASE_TABLE + " WHERE category = " + category;
return mDb.rawQuery(query, null);
这将选择具有与变量category
中包含的内容匹配的类别的所有项目,并返回该行中的所有线圈列。