總結下安卓實現購物車功能原理

主要是在內存創建個名叫SparseArray的對象,算是升級版的Hashmap,在性能上提高了優化,利用key-value存儲商品Bean。

首先我們需要個操控購物車的工具類

這裏叫做CartUtils吧,必須是單例的(畢竟一個用戶一個購物車嘛),我們在該類的構造方法(有初始化作用)裏初始化下sparseArray

Step.1

SparseArray data=new SparseArray<>(100);
這樣就有了存儲商品的數據結構,接下來,我們需要思考將商品存入服務器還是緩存(這裏說的緩存就是sharedpreferences)

這裏我就先選擇本地緩存了。

Step.2

需要從本地緩存中讀取

因爲本地存入的是json數據,json數據如何轉換成sparseArray,直接轉換是不可能的,但是可以間接轉換,我們就需要箇中間人對象

這個對象就是Arraylist

創建個方法 listToSparse();

    private void listToSparse() {
        List<GoodsBean> carts = getAllData();
        //放到sparseArry中
        if (carts != null && carts.size() > 0) {
            for (int i = 0; i < carts.size(); i++) {
                GoodsBean goodsBean = carts.get(i);
                datas.put(Integer.parseInt(goodsBean.getProduct_id()), goodsBean);
            }
        }
    }

  public List<GoodsBean> getAllData() {
        return getDataFromLocal();
    }

  //本地獲取json數據,並且通過Gson解析成list列表數據
    public List<GoodsBean> getDataFromLocal() {
        List<GoodsBean> carts = new ArrayList<>();
        //從本地獲取緩存數據
        String savaJson = CacheUtils.getString(context, JSON_CART);
        if (!TextUtils.isEmpty(savaJson)) {
            //把數據轉換成列表
            carts = new Gson().fromJson(savaJson, new TypeToken<List<GoodsBean>>() {
            }.getType());
        }
        return carts;

    }


這裏用到了Gson將Json字符串轉化爲List

然後分別遍歷list加入sparseArray。

提供三個方法,對外進行調用

addData() deleteData() updateData()

    public void addData(GoodsBean cart) {

        //添加數據
        GoodsBean tempCart = datas.get(Integer.parseInt(cart.getProduct_id()));
        if (tempCart != null) {
            tempCart.setNumber(tempCart.getNumber() + cart.getNumber());
        } else {
            tempCart = cart;
            tempCart.setNumber(1);
        }

        datas.put(Integer.parseInt(tempCart.getProduct_id()), tempCart);



        //保存數據
        commit();
    }

這裏的commit就是將sparseArray存入本地緩存

  private void commit() {
        //把parseArray轉換成list
        List<GoodsBean> carts = sparsesToList();
        //把轉換成String
        String json = new Gson().toJson(carts);

        // 保存
        CacheUtils.putString(context, JSON_CART, json);

    }


    private List<GoodsBean> sparsesToList() {
        List<GoodsBean> carts = new ArrayList<>();
        if (datas != null && datas.size() > 0) {
            for (int i = 0; i < datas.size(); i++) {
                GoodsBean shoppingCart = datas.valueAt(i);
                carts.add(shoppingCart);
            }
        }
        return carts;
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章