【问题标题】:Updating an ArrayList with items from sqlite database使用 sqlite 数据库中的项目更新 ArrayList
【发布时间】:2021-02-21 15:16:47
【问题描述】:

我正在尝试从 sqlite 数据库中获取数据并使用这些数据更新自定义回收站视图。我在我的数据库帮助器类中创建了一个方法,该方法返回从数据库中获取的项目的 ArrayList。 这就是我期望该方法起作用的方式:

  1. 查询数据库,将结果集存储在 Cursor 对象中。
  2. 循环遍历 Cursor 对象中的结果集,并将每个项目添加到 ArrayList 对象的末尾。
  3. 返回包含从数据库中获取的项目的 ArrayList 对象。

但这就是方法的工作原理:

  1. 查询数据库,将结果集存储在 Cursor 对象中。正确。
  2. 在结果集的第一次迭代中,结果集中的第一项被添加到 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;
}

【问题讨论】:

    标签: java android sqlite


    【解决方案1】:

    您的代码所做的是,它只为 while 循环所做的每次迭代更新 RechargeCard card = new RechargeCard();。 您应该将RechargeCard card = new RechargeCard(); 放在 do while 循环中 所以每次迭代都会创建新的实例

    public ArrayList<RechargeCard> getCard(){
        ArrayList<RechargeCard>  list = new ArrayList<>();
       
        SQLiteDatabase database = getReadableDatabase();
        String query = "SELECT * FROM " + RechargeEntry.TABLE_NAME;
        Cursor cursor = database.rawQuery(query, null);
    
        if (cursor.moveToFirst()){
            do{
             RechargeCard card = new RechargeCard();
                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;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-27
      • 2020-07-19
      • 1970-01-01
      • 2020-04-19
      • 2021-04-07
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多