购物车商品的数据存储器实现
来源:互联网 发布:java软件理论基础 编辑:程序博客网 时间:2024/05/01 02:07
购物车数据存储器是贯穿整个App的,在商品详情页、商品列表页,只要有加入购物车按钮,都要将商品加入上存储器中,然后在购物车页面的RecyclerView中显示出来。下面,就来实现购物车数据存储器:
①定义商品Bean
public class Wares implements Serializable {
private Long id;
private String name;
private String imgUrl;
private String description;
private Float price;
}
②定义加入购物车内的商品Bean
public class ShoppingCart extends Wares implements Serializable {
private int count;
private boolean isChecked=true;
}
这两个Bean都是可以序列化的,所以可以跨进程传递。
③将Bean转化为json数据,来存储到SharedPreference中,实现数据存储器的功能。所以首先要有两个工具类来操作SharedPreference和解析json数据。
public class PreferencesUtils {
public static String PREFERENCE_NAME = "Cniao_Pref_Common";
public static boolean putString(Context context, String key, String value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString(key, value);
return editor.commit();
}
public static String getString(Context context, String key) {
return getString(context, key, null);
}
public static String getString(Context context, String key, String defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getString(key, defaultValue);
}
public static boolean putInt(Context context, String key, int value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putInt(key, value);
return editor.commit();
}
public static int getInt(Context context, String key) {
return getInt(context, key, -1);
}
public static int getInt(Context context, String key, int defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getInt(key, defaultValue);
}
public static boolean putLong(Context context, String key, long value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putLong(key, value);
return editor.commit();
}
public static long getLong(Context context, String key) {
return getLong(context, key, -1);
}
public static long getLong(Context context, String key, long defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getLong(key, defaultValue);
}
public static boolean putFloat(Context context, String key, float value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putFloat(key, value);
return editor.commit();
}
public static float getFloat(Context context, String key) {
return getFloat(context, key, -1);
}
public static float getFloat(Context context, String key, float defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getFloat(key, defaultValue);
}
public static boolean putBoolean(Context context, String key, boolean value) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean(key, value);
return editor.commit();
}
public static boolean getBoolean(Context context, String key) {
return getBoolean(context, key, false);
}
public static boolean getBoolean(Context context, String key, boolean defaultValue) {
SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return settings.getBoolean(key, defaultValue);
}
}
public class JSONUtil {
private static Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
public static Gson getGson(){
return gson;
}
public static <T> T fromJson(String json,Class<T> clz){
return gson.fromJson(json,clz);
}
public static <T> T fromJson(String json,Type type){
return gson.fromJson(json,type);
}
public static String toJSON(Object object){
return gson.toJson(object);
}
}
④实现数据存储器:
public class CartProvider {
public static final String CART_JSON="cart_json";
private SparseArray<ShoppingCart> datas =null;
private Context mContext;
public CartProvider(Context context){
mContext = context;
datas = new SparseArray<>(10);
listToSparse();
}
private void listToSparse(){
List<ShoppingCart> carts = getDataFromLocal();
if(carts!=null && carts.size()>0){
for (ShoppingCart cart: carts) {
datas.put(cart.getId().intValue(),cart);
}
}
}
public List<ShoppingCart> getDataFromLocal(){
String json = PreferencesUtils.getString(mContext,CART_JSON);
List<ShoppingCart> carts =null;
if(json !=null ){
carts = JSONUtil.fromJson(json,new TypeToken<List<ShoppingCart>>(){}.getType());
}
return carts;
}
public void put(ShoppingCart cart){
ShoppingCart temp = datas.get(cart.getId().intValue());
if(temp !=null){
temp.setCount(temp.getCount()+1);
}else{
temp = cart;
temp.setCount(1);
}
datas.put(cart.getId().intValue(),temp);
commit();
}
public void put(Wares wares){
ShoppingCart cart = convertData(wares);
put(cart);
}
public void update(ShoppingCart cart){
datas.put(cart.getId().intValue(),cart);
commit();
}
public void delete(ShoppingCart cart){
datas.delete(cart.getId().intValue());
commit();
}
public List<ShoppingCart> getAll(){
return getDataFromLocal();
}
public void commit(){
List<ShoppingCart> carts = sparseToList();
PreferencesUtils.putString(mContext,CART_JSON,JSONUtil.toJSON(carts));
}
private List<ShoppingCart> sparseToList(){
int size = datas.size();
List<ShoppingCart> list = new ArrayList<>(size);
for (int i=0;i<size;i++){
list.add(datas.valueAt(i));
}
return list;
}
public ShoppingCart convertData(Wares item){
ShoppingCart cart = new ShoppingCart();
cart.setId(item.getId());
cart.setDescription(item.getDescription());
cart.setImgUrl(item.getImgUrl());
cart.setName(item.getName());
cart.setPrice(item.getPrice());
return cart;
}
}
现在,一个可持久化存储的购物车数据存储器就实现了,
- 购物车商品的数据存储器实现
- vue2实现简单的商品加入购物车和结算功能(前端数据保存方向)
- 实现购物车商品数量+1、-1按钮的效果
- 实现类似于购物车控制商品数量的按钮
- 用jsp实现一个简单的购物车web应用系统。实现的添加购物商品,删除购物商品并且显示购物车信息。
- 商品添加购物车实现动画效果
- angular实现商品购物
- 商品加入购物车的动画
- jquery 商品飞入购物车的动画
- 购物商品的系统
- 购物车,追加商品
- jquery来实现的添加商品和减少商品数量,用于购物车等实时改变价格
- 模仿购物车实现ListView中商品数量的添加以及总价的调整
- JQuery UI 关于拖拉商品到购物车构思的简单实现
- JQuery UI 关于拖拉商品到购物车构思的简单实现
- Ecshop模板开发(五):商品详情页购物车和立即购买的实现
- 实现购物网站最近浏览商品的流程
- ASP.NET实现B2C显示购物车中的商品
- .net core官方文档
- Android Studio 常用快捷键大全
- android中的timepick控件简单实用
- 高性能服务器架构思路
- hdu1573(中国剩余定理,在区间内解的数量)
- 购物车商品的数据存储器实现
- 巧用UIResponder进行事件传递
- btrfs
- post和get在request中,有一个body字段的差别
- java设计模式之桥接模式
- sqlver 2014 使用自.连接不上的解决办法
- Contains Duplicate 包含重复
- H
- Mybatis源码学习(三)cache包