我试图将sqlite
表值传递给arraylist
。 sqlite
表的值正确显示但是当它们传递给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);
每次在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());
请将下面的代码放在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());
}
尝试使用以下代码:将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
}