接上文,已經實現了,GreenDao的導入,與創建開發需求所需要的數據類,以及自動生成相關的類。
接下來,就是數據庫的操作。
首先,我們拿到數據庫的操作對象,此處我選擇的是在application中,可根據自己的需求自行選擇。
/** * 獲取本地數據庫操作對象 */ public CashierGoodsEntityDao getCashierGoodsEntityDao() { DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "cashier_goods_entity"); Database db = helper.getWritableDb(); DaoSession mDaoSession = new DaoMaster(db).newSession(); CashierGoodsEntityDao cashierGoodsEntityDao = mDaoSession.getCashierGoodsEntityDao(); return cashierGoodsEntityDao; }
上述代碼,兌換爲自己的相應的類即可,拿到的 CashierGoodsEntityDao就可以進行一系列的數據的操作。
/** * 本地購物車的初始化 */ public void setDbData() { cashierGoodsEntityDao = App.getInstance().getCashierGoodsEntityDao(); cashierGoodsEntities = new ArrayList<>(); cashierGoodsEntities.addAll(cashierGoodsEntityDao.loadAll());//獲取所有的購物車數據 }
/** * 新增或者更新原有數據 */ public void insertData() { entity = (CashierGoodsEntity) getIntent().getSerializableExtra("entity"); if (entity == null || cashierGoodsEntities == null) { return; } if (cashierGoodsEntities.size() == 0) { cashierGoodsEntityDao.insert(entity); } else { for (CashierGoodsEntity cashEntity : cashierGoodsEntities) { if (cashEntity.getGoodsId().equals(entity.getGoodsId())) { int tempNumber = cashEntity.getNumber(); cashEntity.setNumber(tempNumber + 1); cashierGoodsEntityDao.update(cashEntity); addNewData = false; } } if (addNewData) { cashierGoodsEntityDao.insert(entity); } } cashierGoodsEntities.clear(); cashierGoodsEntities.addAll(cashierGoodsEntityDao.loadAll());//獲取所有的購物車數據 adapterCashier = new AdapterCashier(this, R.layout.item_cashier_buy_product_layout, cashierGoodsEntities,this::setNumChange); recyclerViewShop.setLayoutManager(new LinearLayoutManager(this)); recyclerViewShop.setAdapter(adapterCashier); View headView = LayoutInflater.from(this).inflate(R.layout.cashier_head_layout_for_clear_layout, null); adapterCashier.addHeaderView(headView); TextView textViewDelete = headView.findViewById(R.id.tvForClear); textViewDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { clearAllShopData(true, ""); } }); adapterCashier.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() { @Override public boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) { CommDialog.newInstance(screen).setClickListen(new CommDialog.TwoSelDialog() { @Override public void leftClick() { } @Override public void rightClick() { //確定 clearAllShopData(false, cashierGoodsEntities.get(position).getGoodsId()); } }).setTitle("刪除商品").setContent("是否刪除商品").show(); return false; } }); }
/** * 清除所有數據,結算或者點擊清空數據時調用 * 清空就清空當前所有數據,並且退出頁面 * 刪除時 需要刷新數據 */ public void clearAllShopData(boolean clearAll, String deleteId) { if (clearAll) { cashierGoodsEntityDao.deleteAll(); finish(); return; } if (StringUtil.isNull(deleteId)) { return; } for (CashierGoodsEntity cashEntity : cashierGoodsEntities) { if (cashEntity.getGoodsId().equals(deleteId)) { cashierGoodsEntityDao.delete(cashEntity); } } cashierGoodsEntities.clear(); cashierGoodsEntities.addAll(cashierGoodsEntityDao.loadAll());//獲取所有的購物車數據 if (cashierGoodsEntities.size() == 0) { finish(); }else { adapterCashier.setNewData(cashierGoodsEntities); } }
@Override public void setNumChange(int number, String goodsId) { for (int i = 0; i < cashierGoodsEntities.size(); i++) { if (cashierGoodsEntities.get(i).getGoodsId().equals(goodsId)) { if (number == 0) { clearAllShopData(false, goodsId); break; } else { cashierGoodsEntities.get(i).setNumber(number); cashierGoodsEntityDao.update(cashierGoodsEntities.get(i)); cashierGoodsEntities.clear(); cashierGoodsEntities.addAll(cashierGoodsEntityDao.loadAll());//獲取所有的購物車數據 adapterCashier.setNewData(cashierGoodsEntities); break; } } } }
以下是購物車列表的 ,適配器中的代碼:
public class AdapterCashier extends BaseQuickAdapter<CashierGoodsEntity, BaseViewHolder> implements View.OnClickListener, EditDialogBuyProduct.dialogDoSure{ private Context context; private int number; private String goodsId; private ItemChange listener; private int stock;//庫存 private int position; private TextView textViewNumber; public AdapterCashier(Context context, int layoutResId, @Nullable List<CashierGoodsEntity> data, ItemChange listener) { super(layoutResId, data); this.context = context; this.listener = listener; } @Override protected void convert(BaseViewHolder helper, CashierGoodsEntity item) { StringUtil.setCommontTextShow(helper.getView(R.id.tvItemProductName), item.getName()); StringUtil.setCommontTextShow(helper.getView(R.id.tvItemProductStock), "當前庫存爲:" + item.getStockNumber()); StringUtil.setTextViewShowProductPrice(item.getPrice(), helper.getView(R.id.tvItemProductPrice), true); GlideTools.setImageShowImgNormal(context, item.getImgUrl(), helper.getView(R.id.ivItemProductImg)); StringUtil.setCommontTextShow(helper.getView(R.id.tvItemProductNumber), item.getNumber() + ""); TextView textViewAdd = helper.getView(R.id.tvItemProductAdd); textViewNumber = helper.getView(R.id.tvItemProductNumber); TextView textViewMinus = helper.getView(R.id.tvItemProductMinus); textViewAdd.setTag(item); textViewMinus.setTag(item); textViewNumber.setTag(item); textViewAdd.setOnClickListener(this::onClick); textViewNumber.setOnClickListener(this::onClick); textViewMinus.setOnClickListener(this::onClick); } @Override public void onClick(View view) { if (view.getTag() == null) { App.showToast("tag爲空"); return; } CashierGoodsEntity entity = (CashierGoodsEntity) view.getTag(); goodsId = entity.getGoodsId(); stock = StringUtil.StringToInt(entity.getStockNumber()); number = entity.getNumber(); switch (view.getId()) { case R.id.tvItemProductAdd: if (number >= stock) { App.showToast("庫存數爲:" + stock); return; } number++; entity.setNumber(number); listener.setNumChange(number, goodsId); break; case R.id.tvItemProductNumber: EditDialogBuyProduct editDialog = new EditDialogBuyProduct(context, R.style.PXDialog, this::whenPressSure, String.valueOf(number), goodsId); editDialog.show(); break; case R.id.tvItemProductMinus: if (number >= 1) { number--; entity.setNumber(number); listener.setNumChange(number, goodsId); } break; } } @Override public void onBindViewHolder(@NonNull BaseViewHolder holder, int position, @NonNull List<Object> payloads) { super.onBindViewHolder(holder, position, payloads); if (payloads.isEmpty()) { onBindViewHolder(holder, position); } else { textViewNumber.setText(payloads.get(0) + ""); } } @Override public void whenPressSure(String number, String goodsId) { listener.setNumChange(StringUtil.StringToInt(number), goodsId); } public interface ItemChange { void setNumChange(int number, String goodsId); } }
其中,數據的輸入是點擊彈出一個框,實現數據的輸入,此處不再贅述,我覺得不是什麼問題,大家可以根據自己的需求,自行修改,此處只是將我的代碼貼出來,僅供參考。
這是我這一兩天的工作成果,寫出來分享給大家,希望可以對大家有所幫助。
重點來了,走過路過不要錯過,支持一下,打賞一下,十塊八塊都是愛。