• day 25


    这段时间一直会出现和困扰我的空指针异常

     出现太多次了

    因为前面我利用一个类(类似于hash map的集合)对购物车数据进行存储包含添加、修改、删除等功能

    package Home.utils;
    
    import android.content.Context;
    import android.util.SparseArray;
    
    import com.google.gson.reflect.TypeToken;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import Home.Data.ShoppingCart;
    
    
    
    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<>(200);
            listToSparse();
    
        }
    
    
    
        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 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;
    
        }
    
    
    
        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 CartProvider(Context context){
    
            mContext = context;
           datas = new SparseArray<>(200);
            listToSparse();
    
        }

    这个类只有在这里才声明了数组以及它的大小

    而我一开始只是单纯的private CartProvider cartProvider 并没有初始化它,所以加上这个就ok了

     public DetailFragment(Context context, Goods good,int id) {
            // Required empty public constructor
            this.mcontext = context;
            this.good=good;
            this.id=id;
            cartProvider=new CartProvider(mcontext);
        }

    还有一个问题也是我掉的小坑,就是我在用RecyclerView设计它的adapter时因为布局文件太多,声明的R.id.时候弄混,然后它就报fragment must no null 的错误,我还一直没发现

    checkBox=view.findViewById(R.id.checkbox_all);
    textView=view.findViewById(R.id.txt_total);
    button1=view.findViewById(R.id.btn_order);
    button2=view.findViewById(R.id.btn_del);
  • 相关阅读:
    适配器模式(PHP实现)
    php基础设计模式 注册树模式、工厂模式、单列模式
    mongodb数据库操作--备份 还原 导出 导入
    mongodb 非 admin 库 认证登陆失败 原因(百度好多都 是渣)db.addUser() 请走开。
    css3 标题超过长度自动省略号
    html5新增及废除属性
    HTML5 改良的 input 元素的种类
    SQLite学习笔记(十一)&&虚拟机原理
    SQLite使用(三)&&核心API使用
    SQLite使用(二)&&数据类型
  • 原文地址:https://www.cnblogs.com/chenaiiu/p/13579906.html
Copyright © 2020-2023  润新知