将购物车项目添加到数据库并检索

时间:2018-10-11 07:30:32

标签: android mysql cart shopping-cart

在mySQL中,我有三个表,分别是用户,餐厅,购物车列表。

此处的用户表用于保存用户详细信息。 餐厅桌用于保存餐点的详细信息,价格和数量。 cartlist用于添加餐厅详细信息。 现在,当特定用户登录到应用程序时,我希望将特定用户的购物车列表项添加到列表中。但是我正在获取将商品添加到购物车的整个用户的详细信息。

show.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String selectQuery = "SELECT * FROM restaurants";
            SQLiteDatabase database = DatabaseManager.getInstance().openDatabase();
            Cursor cursor = database.rawQuery(selectQuery, null);

            if (cursor.moveToFirst()) {
                do {
                    ProductModel productModel = new ProductModel();
                    productModel.setID(Integer.parseInt(cursor.getString(0)));

                    productModel.setName(cursor.getString(1));
                    productModel.setMealname(cursor.getString(2));
                    productModel.setMealprice(cursor.getString(3));
                    productModel.setMealqty(cursor.getString(4));

                    products.add(productModel);

                } while (cursor.moveToNext());
            }

            cursor.close();
            DatabaseManager.getInstance().closeDatabase();

            adapter = new ProductAdapter(ProductList.this, R.layout.activity_cartlistview, products);
            listview.setAdapter(adapter);
            adapter.notifyDataSetChanged();
        }
    });

可投放广告:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_checkout);

    lv_checkout = findViewById(R.id.lv_checkout);
    tv_totalamount = findViewById(R.id.tv_totalamount);
    btn_checkouttopayment = findViewById(R.id.btn_checkouttopayment);

    String selectQuery = "SELECT * FROM carttable";
    SQLiteDatabase database = DatabaseManager.getInstance().openDatabase();
    Cursor cursor = database.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {
            ProductModel productModel = new ProductModel();
            productModel.setID(Integer.parseInt(cursor.getString(0)));

            productModel.setName(cursor.getString(1));
            productModel.setMealname(cursor.getString(2));
            productModel.setMealprice(cursor.getString(3));
            productModel.setMealqty(cursor.getString(4));
            productModel.setMealtotal((Double.parseDouble(cursor.getString(3)) * Double.parseDouble(cursor.getString(4)) + ""));

            products.add(productModel);

        } while (cursor.moveToNext());
    }

    double totalPrices = 0;

    for (int i = 0; i < products.size(); i++) {

        totalPrices += Double.parseDouble(products.get(i).getMealtotal());
    }

    tv_totalamount.setText("Total Amount to be Paid : " + totalPrices + "");
    cursor.close();
    DatabaseManager.getInstance().closeDatabase();

    adapter = new ProductAdapter(this, R.layout.activity_cartlistview, products);
    lv_checkout.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}

要对查询进行哪些更改?让我知道了。TIA!

2 个答案:

答案 0 :(得分:0)

这是因为您正在运行的查询将转到Restaurant表,并从中获取所有记录。据我了解,Cartlist是用户将在其中输入特定餐厅详细信息的表的名称。因此,现在,您正在调用“餐厅”表中的所有记录,无论添加了谁,它都会为您提供列表。 您可能需要将查询更改为

SELECT restaurant_name FROM cartlist WHERE userName = selected_User;

现在您有了餐厅名称。保存并在查询时使用。

SELECT * FROM restaurants WHERE restaurantsName = selected_restaurant_name;

答案 1 :(得分:0)

do {
        ProductModel productModel = new ProductModel();
        productModel.setID(Integer.parseInt(cursor.getString(0)));

        productModel.setName(cursor.getString(1));
        productModel.setMealname(cursor.getString(2));
        productModel.setMealprice(cursor.getString(3));
        productModel.setMealqty(cursor.getString(4));
        productModel.setMealtotal((Double.parseDouble(cursor.getString(3)) * Double.parseDouble(cursor.getString(4)) + ""));

        products.add(productModel);

    }

在模型类中添加一个构造函数并注入。节省几行代码/可读性。

do {
    products.add( new ProductModel(
    Integer.parseInt(cursor.getString(0)), 
    cursor.getString(1),
    cursor.getString(2),
    cursor.getString(3),
    cursor.getString(4),
    }

该行:productModel.setMealtotal((Double.parseDouble(cursor.getString(3)) * Double.parseDouble(cursor.getString(4)) + ""));  似乎包含一个简单的关系,其中“膳食总量=平均数量*膳食价格”也可以在构造函数中完成...这是一个恒定算法,并且是模型的一部分。

这里是模型(我使用lombok添加了@Data,它在编译时会生成所有的getter和setters)

import lombok.Data;

@Data
public class ProductModel {
    private int id;
    private String name;
    private String mealName;
    private int mealPrice;
    private int mealQuantity;
    private int mealTotal;

    //Constructor...i.e. "new ProductModel(field1,field2...)" 
    public ProductModel(int id, String name, String mealName, int mealPrice, int mealQuantity) {
        this.id = id;
        this.name = name;
        this.mealName = mealName;
        this.mealPrice = mealPrice;
        this.mealQuantity = mealQuantity;
        this.mealTotal = mealPrice * mealQuantity;
    }
}