Reputation: 219
I am trying to pass sqlite
table values to an arraylist
. The values of sqlite
table shows correctly but when they are passed to arraylist
.the last row duplicates the number of rows in sqlite
table which means if the sqlite
table is having 2 rows I am getting 2 indexes in arraylist
but only the value of last inserted row duplicates again and again.please help me
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);
Upvotes: 1
Views: 50
Reputation: 4445
Try with below code : Put while (cursor.moveToNext());
at last of your code.
while (cursor.moveToNext()); will stop if there will no next value available in the table
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
}
Upvotes: 0
Reputation: 768
Please put this below code where cursor.moveToNext()
executes to new row.
You are defining values to the same object so it adds same object reference.
Create each time new object in while loop as stated below.
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());
}
Upvotes: 0
Reputation: 12953
every time in loop
you need to create new instance of RoleTableModel
as in
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());
Upvotes: 1