user8601021
user8601021

Reputation: 219

sqlite table last row duplicates when passing values to arraylist

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

Answers (3)

Abhishek kumar
Abhishek kumar

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

Chintak Patel
Chintak Patel

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

Rajan Kali
Rajan Kali

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

Related Questions