Reputation: 121
I have an SQLite DB in my Android Project. I have a RecyclerView for "Cart" Activity, where I display some items from this DB. Every item has its own "quantity" and "price". What I want to do, is to create a method to display a total sum of elements (Total price = Elem1(quantity * price) + Elem2(quantity * price)+...) in one TextView. I let down my database. I appreciate any help!
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "favorites.db";
public static final String TABLE_NAME_CART = "cart_table";
public static final String COL_1 = "IMAGE";
public static final String COL_2 = "NAME";
public static final String COL_3 = "PRICE";
public static final String COL_4 = "DETAILS";
public static final String COL_5 = "MODEL";
public static final String COL_6 = "IMAGEE";
public static final String COL_7 = "IMAGEEE";
public static final String COL_8 = "QUANTITY";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
private static DatabaseHelper sDatabaseHelper;
public DatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
public static DatabaseHelper getInstance(Context context) {
if (sDatabaseHelper == null) {
sDatabaseHelper = new DatabaseHelper(context);
}
return sDatabaseHelper;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME_CART + " (" + COL_1 + " INTEGER, " + COL_2 + " VARCHAR, " + COL_3 + " INTEGER, " + COL_4 + " VARCHAR, " + COL_5 + " VARCHAR, " + COL_6 + " INTEGER, " + COL_7 + " INTEGER, " + COL_8 + " INTEGER);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME_CART);
onCreate(db);
}
// Insert Data in cart table
public boolean insertDataCart(items items) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_1, items.getlImageId());
contentValues.put(COL_2, items.getlName());
contentValues.put(COL_3, items.getlPrice());
contentValues.put(COL_4, items.getlDetails());
contentValues.put(COL_5, items.getlModel());
contentValues.put(COL_6, items.getlImageId1());
contentValues.put(COL_7, items.getlImageId2());
contentValues.put(COL_8, items.getQuantity());
long result = db.insert(TABLE_NAME_CART, null, contentValues);
if (result == -1) {
return false;
} else {
return true;
}
}
// See Data Cart
public ArrayList<items> getAllDataCart() {
ArrayList<items> favItem = new ArrayList<>();
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("select * from " + TABLE_NAME_CART, null);
while (res.moveToNext()) {
int img = res.getInt(0);
String name = res.getString(1);
int price = res.getInt(2);
String details = res.getString(3);
String model = res.getString(4);
int img1 = res.getInt(5);
int img2 = res.getInt(6);
int quantity = res.getInt(7);
items newItems = new items(name, price, img, img1, img2, details, model,quantity);
favItem.add(newItems);
}
return favItem;
}
// Sum total items price
public void sumPriceCartItems(int sum) {
int val;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("select "+ COL_3 + " from " + TABLE_NAME_CART, null);
Cursor cursor2 = db.rawQuery("select "+ COL_8 + " from " + TABLE_NAME_CART, null);
if(cursor.moveToFirst())
while (cursor.moveToNext() && cursor2.moveToNext()) {
val = COL_3 * cursor2;
}
}
// Delete Data Cart
public void deleteCart(int id) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME_CART, COL_1 + "=" + id, null);
}
// Update Cart Quantity
public void updateDataCard(int id, int quantity) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues val = new ContentValues();
val.put(COL_8, quantity);
db.update(TABLE_NAME_CART, val, "IMAGE=" + id, null);
}
Upvotes: 2
Views: 1163
Reputation: 164099
Change the method sumPriceCartItems()
of your DatabaseHelper
to this:
public int sumPriceCartItems() {
int result = 0;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery("select sum("+ COL_3 + " * " + COL_8 + ") from " + TABLE_NAME_CART, null);
if (cursor.moveToFirst()) result = cursor.getInt(0);
cursor.close();
db.close();
return result;
}
so by using only 1 Cursor
and without the need of a loop it returns the sum that you want.
In your activity's code get the sum and display it in the TextView
:
DatabaseHelper db = DatabaseHelper.getInstance(this);
textView.setText("" + db.sumPriceCartItems());
Upvotes: 1