我目前正在开发一个Android应用程序。我有一个sqlite数据库,它在四列中存储文本(我只是在我的应用程序中用作字符串)。我试图从表中返回所有行和列。我已经创建并将数据插入表中,并使用adb shell中的sqlite3验证它是否存在。我使用与我在程序中使用的语句相同的语句,它返回包含所有正确数据的所有行。在我的程序中,我通过遍历游标以ArrayList<ArrayList<String>>
格式存储所有数据。它返回与行对应的正确ArrayList<String>
个数,但它们都只有最后一行的信息。这是我的代码:
private static final String SELECT = "SELECT * FROM " + TABLE_NAME;
public ArrayList<ArrayList<String>> allRecipes()
{
ArrayList<ArrayList<String>> results = new ArrayList<ArrayList<String>>();
ArrayList<String> recipe = new ArrayList<String>();
Cursor cursor = db.rawQuery(SELECT, null);
if(cursor.moveToFirst())
{
do
{
recipe.clear();
recipe.add(cursor.getString(1));
recipe.add(cursor.getString(2));
recipe.add(cursor.getString(3));
recipe.add(cursor.getString(4));
results.add(recipe);
}while(cursor.moveToNext());
if(cursor != null && !cursor.isClosed())
cursor.close();
}
return results;
}
然后我遍历程序的另一部分中的ArrayLists,并且包含的所有信息只是输入表中的最后一行的重复。我一收到它就检查了我的其他方法中的ArrayLists,它们都是一样的,所以我假设它必定是这个代码段中的一个问题。我也尝试了使用group by和order by子句的select语句,但它仍然不起作用。使用带有正确参数的db.query()会导致同样的问题。
答案 0 :(得分:0)
之所以发生这种情况,是因为您在数组列表中添加了配方的链接,并在周期的每次迭代中更改了配方的值。
您应该将代码更改为此
public ArrayList<ArrayList<String>> allRecipes()
{
ArrayList<ArrayList<String>> results = new ArrayList<ArrayList<String>>();
Cursor cursor = db.rawQuery(SELECT, null);
if(cursor.moveToFirst())
{
do
{
ArrayList<String> recipe = new ArrayList<String>();
recipe.add(cursor.getString(1));
recipe.add(cursor.getString(2));
recipe.add(cursor.getString(3));
recipe.add(cursor.getString(4));
results.add(recipe);
}while(cursor.moveToNext());
if(cursor != null && !cursor.isClosed())
cursor.close();
}
return results;
}