【问题标题】:sqlite table last row duplicates when passing values to arraylist将值传递给arraylist时sqlite表最后一行重复
【发布时间】:2018-03-06 10:22:13
【问题描述】:

我正在尝试将sqlite 表值传递给arraylist。 sqlite 表的值显示正确,但是当它们传递给 arraylist.the 最后一行复制了 sqlite 表中的行数,这意味着如果 sqlite 表有 2 行,我将获得 2 个索引arraylist 但只有最后插入的行的值一次又一次地重复。请帮助我

 if (cursor.moveToFirst()) {
        do {
            roleTableModel.setId(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ID)));
            Log.d("Role id", String.valueOf(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ID))));
            roleTableModel.setName(cursor.getString(cursor.getColumnIndex(RoleTableModel.ROLE_NAME)));
            Log.d("Role Name", String.valueOf(cursor.getString(cursor.getColumnIndex(RoleTableModel.ROLE_NAME))));
            roleTableModel.setValue(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ROLE_COUNT)));
            Log.d("Role Value", String.valueOf(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ROLE_COUNT))));
            roleDetails.add(roleTableModel);

【问题讨论】:

  • 你能发布你的完整代码

标签: android sqlite arraylist


【解决方案1】:

每次在loop 中,您都需要创建RoleTableModel 的新实例,如

        if (cursor.moveToFirst()) {
                do {
                    roleTableModel = new RoleTableModel();//<--add this line
 roleTableModel.setId(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ID)));
                    Log.d("Role id", String.valueOf(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ID))));
                    roleTableModel.setName(cursor.getString(cursor.getColumnIndex(RoleTableModel.ROLE_NAME)));
                    Log.d("Role Name", String.valueOf(cursor.getString(cursor.getColumnIndex(RoleTableModel.ROLE_NAME))));
                    roleTableModel.setValue(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ROLE_COUNT)));
                    Log.d("Role Value", String.valueOf(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ROLE_COUNT))));
                    roleDetails.add(roleTableModel);
        }while(cursor.moveToNext());

【讨论】:

  • 非常感谢...我非常关注这个问题。谢谢
【解决方案2】:

请将此代码放在cursor.moveToNext() 执行到新行的代码下方。

您正在为同一个对象定义值,因此它添加了相同的对象引用。

如下所述在while循环中创建每次新对象。

if (cursor.moveToFirst()) {
    do {

    RoleModel roleTableModel = new RoleModel();

     roleTableModel.setId(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ID)));
        Log.d("Role id", String.valueOf(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ID))));
        roleTableModel.setName(cursor.getString(cursor.getColumnIndex(RoleTableModel.ROLE_NAME)));
        Log.d("Role Name", String.valueOf(cursor.getString(cursor.getColumnIndex(RoleTableModel.ROLE_NAME))));
        roleTableModel.setValue(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ROLE_COUNT)));
        Log.d("Role Value", String.valueOf(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ROLE_COUNT))));
        roleDetails.add(roleTableModel);

    } while(cursor.moveToNext());
}

【讨论】:

    【解决方案3】:

    试试下面的代码:把while (cursor.moveToNext());放在你代码的最后。

    while (cursor.moveToNext());如果没有可用的下一个值,将停止 表

            if (cursor.moveToFirst()) {
                do {
                    RoleModel roleTableModel = new RoleModel(); //Create object every time
                    roleTableModel.setId(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ID)));
                    Log.d("Role id", String.valueOf(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ID))));
                    roleTableModel.setName(cursor.getString(cursor.getColumnIndex(RoleTableModel.ROLE_NAME)));
                    Log.d("Role Name", String.valueOf(cursor.getString(cursor.getColumnIndex(RoleTableModel.ROLE_NAME))));
                    roleTableModel.setValue(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ROLE_COUNT)));
                    Log.d("Role Value", String.valueOf(cursor.getInt(cursor.getColumnIndex(RoleTableModel.ROLE_COUNT))));
                    roleDetails.add(roleTableModel);
    
                   } while (cursor.moveToNext());
    
                        Log.e("Total/Count List Size", "" + cList.size()); //ArrayList Size
             }
    

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 2010-12-07
      相关资源
      最近更新 更多