【发布时间】:2021-02-21 15:16:47
【问题描述】:
我正在尝试从 sqlite 数据库中获取数据并使用这些数据更新自定义回收站视图。我在我的数据库帮助器类中创建了一个方法,该方法返回从数据库中获取的项目的 ArrayList。 这就是我期望该方法起作用的方式:
- 查询数据库,将结果集存储在 Cursor 对象中。
- 循环遍历 Cursor 对象中的结果集,并将每个项目添加到 ArrayList 对象的末尾。
- 返回包含从数据库中获取的项目的 ArrayList 对象。
但这就是方法的工作原理:
- 查询数据库,将结果集存储在 Cursor 对象中。正确。
- 在结果集的第一次迭代中,结果集中的第一项被添加到 ArrayList 对象的索引 0 处。正如预期的那样。但是在第二次迭代中,结果集中的第二项替换了 ArrayList 中索引 0 处已添加的项,并且它也在索引 1 处添加。此外,在第三次迭代中,结果集中的第三项替换了所有ArrayList 中的项目,这样我们现在在索引 0、1 和 2 处只有第三个项目,而不是在索引 0 处有第一个项目,在索引 1 处有第二个项目,在索引 2 处有第三个项目。我真的很感谢我能提供的所有帮助开始吧。
下面是从数据库中获取项目的方法的 sn-p
public ArrayList<RechargeCard> getCard(){
ArrayList<RechargeCard> list = new ArrayList<>();
RechargeCard card = new RechargeCard();
SQLiteDatabase database = getReadableDatabase();
String query = "SELECT * FROM " + RechargeEntry.TABLE_NAME;
Cursor cursor = database.rawQuery(query, null);
if (cursor.moveToFirst()){
do{
String name = cursor.getString(cursor.getColumnIndexOrThrow(RechargeEntry.NAME_COLUMN));
int price = cursor.getInt(cursor.getColumnIndexOrThrow(RechargeEntry.PRICE_COLUMN));
double quantity = cursor.getDouble(cursor.getColumnIndexOrThrow(RechargeEntry.QUANTITY_COLUMN));
double total = cursor.getDouble(cursor.getColumnIndexOrThrow(RechargeEntry.TOTAL));
card.setName(name);
card.setPrice(price);
card.setQuantity(quantity);
card.setTotal(total);
list.add(card);
} while (cursor.moveToNext());
}
cursor.close();
database.close();
return list;
}
【问题讨论】: