将值传递给arraylist时,sqlite表的最后一行重复

问题描述 投票:1回答:3

我试图将sqlite表值传递给arraylistsqlite表的值正确显示但是当它们传递给arraylist时。最后一行重复sqlite表中的行数,这意味着如果sqlite表有2行我在arraylist中得到2个索引但是只有最后插入的值行反复重复。请帮助我

 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
3个回答
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());

0
投票

请将下面的代码放在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());
}

0
投票

尝试使用以下代码:将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
         }
© www.soinside.com 2019 - 2024. All rights reserved.