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);
原文地址:https://www.cnblogs.com/chenaiiu/p/13579906.html