package com.atguigu.shoppingmall.shoppingcart.utils;
import android.content.Context;
import android.text.TextUtils;
import android.util.SparseArray;
import com.atguigu.shoppingmall.app.MyAppliction;
import com.atguigu.shoppingmall.home.bean.GoodsBean;
import com.atguigu.shoppingmall.utils.CacheUtils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.List;
/**
* 购物车数据存储类
*/
public class CartProvider {
public static final String JSON_CART = "json_cart";
private Context context;
//优化过的HashMap集合
private SparseArray<GoodsBean> datas;
private static CartProvider cartProvider;
private CartProvider(Context context) {
this.context = context;
datas = new SparseArray<>(100);
listToSparse();
}
public static CartProvider getInstance() {
if (cartProvider == null) {
cartProvider = new CartProvider(MyAppliction.getContext());
}
return cartProvider;
}
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);
}
}
}
private List<GoodsBean> parsesToList() {
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;
}
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;
}
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();
}
//保存数据
private void commit() {
//把parseArray转换成list
List<GoodsBean> carts = parsesToList();
//把转换成String
String json = new Gson().toJson(carts);
// 保存
CacheUtils.putString(context, JSON_CART, json);
}
public void deleteData(GoodsBean cart) {
//删除数据
datas.delete(Integer.parseInt(cart.getProduct_id()));
//保存数据
commit();
}
public void updataData(GoodsBean cart) {
//修改数据
datas.put(Integer.parseInt(cart.getProduct_id()), cart);
//保存数据
commit();
}
/**
* 根据key查找书籍
* @param goods_bean
* @return
*/
public GoodsBean findData(GoodsBean goods_bean) {
GoodsBean goodsBean = datas.get(Integer.parseInt(goods_bean.getProduct_id()));
if(goodsBean != null){
return goods_bean;
}
return null;
}
}