【Android studio】 【onClick NullPointerException】 java.lang.NullPointerException: Attempt to invoke interface method ··········.Adapter.goods_Adapter.onClick(goods_Adapter.java:44)

【Android studio】 【onClick NullPointerException】
报错:java.lang.NullPointerException: Attempt to invoke interface method ··········.Adapter.goods_Adapter.onClick(goods_Adapter.java:44)
空指针,在listview里的item设置了按钮监听事件
代码:

package com.example.nero.thecashregistersystem.Adapter;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.TextView;

import com.example.nero.thecashregistersystem.R;
import com.example.nero.thecashregistersystem.bean.goodsInfo;

import java.util.List;

public class goods_Adapter extends ArrayAdapter<goodsInfo> implements View.OnClickListener {

    private int mResource;
    List<goodsInfo> goodsinfo ;
    private Context mContext;
    private LayoutInflater mInflater;
//    private MyClickListener mListener;//所有listview的item共用同一个


    private BtnOnclick btnOnclick;
    public BtnOnclick getBtnOnclick() {
        return btnOnclick;
    }

    public void setBtnOnclick(BtnOnclick bottomBtnOnclick) {
        this.btnOnclick = btnOnclick;
    }

    public interface BtnOnclick{
        public void click(View view,int index);
    }

    @Override
    public void onClick(View view) {
        btnOnclick.click(view,(int)view.getTag());//**这行代码报错**
    }





//原:
    public goods_Adapter(Context context, int resource, List<goodsInfo> objects) {
        super(context, resource, objects);
//        mResource = R.layout.item;
        mResource = resource;

    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        goodsInfo goodsinfo = getItem(position);
        View view;
        ViewHolder viewHolder;
        if (convertView == null){
            view = LayoutInflater.from(getContext()).inflate(mResource,null);
            viewHolder = new ViewHolder();
            viewHolder.name = (TextView) view.findViewById(R.id.listview_name);
            viewHolder.goods_number = (TextView) view.findViewById(R.id.listview_goodsnumber);
            viewHolder.in_price = (TextView) view.findViewById(R.id.listview_inprice);
            viewHolder.out_price = (TextView) view.findViewById(R.id.listview_outprice);
            viewHolder.update_time = (TextView) view.findViewById(R.id.listview_updatetime);
             viewHolder.btn_add_jiesuan = (ImageButton) view.findViewById(R.id.btn_add_jiesuan);
            view.setTag(viewHolder);
        }
        else{
            view = convertView;
            viewHolder = (ViewHolder) view.getTag();
        }
        viewHolder.name.setText(goodsinfo.getName());
        viewHolder.goods_number.setText(goodsinfo.getgoods_number());
        viewHolder.in_price.setText(goodsinfo.getin_price()+"");
        viewHolder.out_price.setText(goodsinfo.getout_price()+"");
        viewHolder.update_time.setText(goodsinfo.getupdate_time());
        //设置按钮监听
        viewHolder.btn_add_jiesuan.setOnClickListener(this);
        viewHolder.btn_add_jiesuan.setTag(position);

        return view;
    }



    class ViewHolder{
        TextView name;
        TextView goods_number;
        TextView in_price;
        TextView out_price;
        TextView update_time;
        ImageButton btn_add_jiesuan;
//        int position;
    }
}

在fragment里的相关代码是

``` private void InitListview(final List goodsArray){
adapter = new goods_Adapter(getActivity(),R.layout.item,goodsArray);
lv.setAdapter(adapter);
adapter.setBtnOnclick(new goods_Adapter.BtnOnclick() {
@Override
public void click(View view, int index) {
switch (view.getId()){
case R.id.btn_add_jiesuan:
Toast.makeText(
getActivity(), "listview的内部的按钮被点击了!,位置是:" + (Integer) view.getTag() + ",内容是-->" + goodsArray.get((Integer) view.getTag()).name,
Toast.LENGTH_SHORT).show();

                    break;
            }
        }
    });

}
而且报错那行还debug不了,不知道为什么,其他地方就可以debug。
view = LayoutInflater.from(getContext()).inflate(mResource,null);确定是item的id,debug看过了


希望大佬告诉我请问问题出在哪里??谢谢!!!
public void setBtnOnclick(BtnOnclick bottomBtnOnclick) {
    this.btnOnclick = btnOnclick;
}

public interface BtnOnclick{
    public void click(View view,int index);
}

这里返回的是空的接口

public void setBtnOnclick(BtnOnclick bottomBtnOnclick) {
    this.btnOnclick = btnOnclick;
}

    是不是这个?

        public void setBtnOnclick(BtnOnclick bottomBtnOnclick) {
    this.btnOnclick = bottomBtnOnclick;
}

/**
* 自定义监听
*/
interface LvOnClickCallBack{
void lvClick(String s);
}
LvOnClickCallBack callBack;

    /**
     * 设置监听
     * @param callBack
     */
    public void setLvOnClickCallBack(LvOnClickCallBack callBack){
        this.callBack = callBack;
    }

            @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        LvViewHolder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.list_lv_layout,null);
            holder = new LvViewHolder();
            holder.lv_tv = convertView.findViewById(R.id.lv_tv);
            holder.lv_layout = convertView.findViewById(R.id.lv_layout);
            convertView.setTag(holder);
        }else {
            holder = (LvViewHolder) convertView.getTag();
        }
        holder.lv_tv.setText(data.get(position));
        holder.lv_layout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (callBack != null) {
                    callBack.lvClick(data.get(position));
                }
            }
        });
        return convertView;
    }

            引用

            adapter.setLvOnClickCallBack(new LVAdapter.LvOnClickCallBack() {
        @Override
        public void lvClick(String s) {
            Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
        }
    });