在Android应用中实现条形码扫描与购物车功能
在现代零售与库存管理系统中,条形码扫描技术已经成为不可或缺的一部分。它不仅提高了数据录入的准确性,还大大加快了操作速度。本文将介绍如何在Android应用中集成条形码扫描功能,并将扫描到的商品添加到购物车中。
首先,我们需要处理从条形码扫描器返回的结果。在Android中,这通常通过onActivityResult方法实现。该方法在启动的活动(Activity)完成并返回结果时被调用。下面是一个示例代码,展示了如何处理条形码扫描的结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SCANNER_REQUEST_CODE && resultCode == RESULT_OK && data != null) {
String scannedValue = data.getStringExtra("SCANNED_VALUE");
if (scannedValue != null) {
addScannedItemToCart(scannedValue);
}
}
}
在上面的代码中,SCANNER_REQUEST_CODE是一个用于标识条形码扫描请求的整型常量。当resultCode为RESULT_OK且data不为空时,我们从Intent中获取名为"SCANNED_VALUE"的额外数据,这通常是扫描到的条形码值。如果扫描值不为空,我们调用addScannedItemToCart方法,将扫描到的商品添加到购物车。
addScannedItemToCart方法的具体实现如下:
private void addScannedItemToCart(String barcode) {
final SQLiteDatabase db = openOrCreateDatabase("stockpilerDB", Context.MODE_PRIVATE, null);
try {
String id = barcode.trim().toUpperCase();
Cursor c = db.rawQuery("SELECT * FROM inventory WHERE id='" + id + "';", null);
if (c.moveToFirst()) {
String itemName = c.getString(1);
double sellingPrice = c.getDouble(6);
int newQuantity = 1;
Cursor cartCursor = db.rawQuery("SELECT quantity FROM cart WHERE id='" + id + "';", null);
if (cartCursor.moveToFirst()) {
newQuantity = cartCursor.getInt(0) + 1;
}
cartCursor.close();
double totalAmount = sellingPrice * newQuantity;
ContentValues cv = new ContentValues();
cv.put("id", id);
cv.put("itemname", itemName);
cv.put("quantity", newQuantity);
cv.put("sellingprice", sellingPrice);
cv.put("totalamt", totalAmount);
if (cartCursor.moveToFirst()) {
db.update("cart", cv, "id=?", new String[]{id});
} else {
db.insert("cart", null, cv);
}
Toast.makeText(this, "产品已添加到购物车", Toast.LENGTH_SHORT).show();
updateCartView();
} else {
Toast.makeText(this, "产品不可用", Toast.LENGTH_SHORT).show();
}
c.close();
} catch (Exception e) {
Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
}
}
在这个方法中,我们首先使用条形码值作为ID,从SQLite数据库stockpilerDB的inventory表中查询商品信息。如果找到了对应的商品,我们获取其名称、销售价格,并初始化数量为1。接着,我们检查购物车中是否已有该商品。如果有,我们将其数量加1;如果没有,我们准备一个新的购物车条目。
计算新数量对应的总金额后,我们使用ContentValues对象来存储更新后的购物车条目信息,并根据购物车中是否已有该商品来决定是更新现有条目还是插入新条目。
最后,我们通过Toast消息通知用户操作结果,并调用updateCartView方法来更新购物车视图,以反映最新的购物车内容。
通过这种方法,我们可以轻松地在Android应用中实现条形码扫描与购物车功能,为用户提供更加便捷和高效的购物体验。