Android购物车全选报空指针(文中有给出报空指针的地方)

private List<ShoppingBean> mList=new ArrayList<>();
public static HashMap<Integer,Boolean> isSelected;
private Context context;
    //为单选设置的回调
private Callback mCallback;

public static HashMap<Integer,Boolean> getIsSelected() {
    return isSelected;
}

public static void setIsSelected(HashMap<Integer, Boolean> isSelected) {
    ShoppingAdapter.isSelected = isSelected;
}

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    mCallback.click((CheckBox) buttonView, isChecked);
}

public interface Callback{
    void click(CheckBox check, boolean isChecked);
}

public ShoppingAdapter(List<ShoppingBean> list, Context context, Callback mCallback) {
    this.mList = list;
    this.context = context;
    this.mCallback = mCallback;
    isSelected=new HashMap<>();
    initData();
}

//初始化isSelected
private void initData() {
    for (int i = 0; i < mList.size(); i++) {
        getIsSelected().put(i, false);
    }
}

@Override
public int getCount() {
    return mList.size();
}

@Override
public Object getItem(int position) {
    return mList.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder=null;
    if (convertView==null){
        viewHolder=new ViewHolder();
        convertView= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_shopping,null);
        viewHolder.check= (CheckBox) convertView.findViewById(R.id.item_cb);
        viewHolder.img_goods= (ImageView) convertView.findViewById(R.id.img_goods);
        viewHolder.name= (TextView) convertView.findViewById(R.id.name);
        viewHolder.guige= (TextView) convertView.findViewById(R.id.guige);
        viewHolder.tv_pay= (TextView) convertView.findViewById(R.id.tv_pay);
        viewHolder.number= (TextView) convertView.findViewById(R.id.number);


        convertView.setTag(viewHolder);
    }else{
        viewHolder= (ViewHolder) convertView.getTag();
    }

    ShoppingBean shoppingBean=mList.get(position);
    viewHolder.name.setText(shoppingBean.getWareName());
    viewHolder.guige.setText(shoppingBean.getCaption());
    viewHolder.tv_pay.setText(shoppingBean.getPrice());
    viewHolder.number.setText(shoppingBean.getQuantity());

    viewHolder.check.setOnCheckedChangeListener(this);
    viewHolder.check.setTag(position);
    String img=shoppingBean.getWarePicture();
    if (img!=null){
        Glide.with(context).load(img).placeholder(R.mipmap.picture).error(R.mipmap.picture) .into(viewHolder.img_goods);
    }
            //下边这行一直报空指针是为什么呢?

// viewHolder.check.setChecked(getIsSelected().get(position));
return convertView;
}

public static class ViewHolder{
public CheckBox check;
public ImageView img_goods;
public TextView name,guige,tv_pay,number;
}

// viewHolder.check.setChecked(getIsSelected().get(position));
这一行空指针吗?如果确认checkBox不为空,就可能是map的问题
而且这个map没必要用静态

getIsSelected().get(position)
两种可能:

1.position 对应的对象为空
2.getIsSeleccted() 本身为空
我觉得是public static HashMap isSelected; 为空

public static HashMap getIsSelected() {
return isSelected;
}

返回的 isSlected 就为空,更没有 .get(int i); 方法之说了
不必把 isSelected 设为静态的 public HashMap isSelected;

其实最简单的就是在
public static HashMap getIsSelected() {
return isSelected;
}
方法的 return 之前,给变量实例化并赋值;

还是变量不要设为静态的