在Fragment实现接口遇到的坑

来源:互联网 发布:知世故而不世故 下联 编辑:程序博客网 时间:2024/06/05 08:10
前几天的写的项目一直在虚拟机上面运行,一点问题没有,但是今天在真机上面试了一下结果出错,而且错误提示是空指针异常。
java.lang.NullPointerException: Attempt to invoke interface method 'void com.lylk.hcwy.fragment.WineListFragment$OnWineListFragmentClickListener.onAddClick(java.lang.String)' on a null object reference
但是以前明明在虚拟机上的时候一切正常啊,为了测试虚拟机上能正常运行把程序卸载重新拷了一遍结果还是正常运行。然后就开始百度实现接口时候虚拟机不出错但是真机出错的情况,当然百度的有点偏了,所以也没啥结果,但是看别人说的有的是因为没有初始化才出错的,所以我就想是不是因为没有初始化,但是明明在onAttach里面实现了。
@Override    public void onAttach(Context context) {        super.onAttach(context);        Log.i("---LK---", "onAttach");        mCallBack = (OnWineListFragmentClickListener) getActivity();    }
所以就加上了打印日志看是否进入了这个方法,结果测试的结果就是没有进入这个方法,所以错误的原因找到了,因此百度起来也比较容易了。
最新的 onAttach(Context) 方法在API低于 23 的版本中不会去调用后者,只会去调用onAttach(Activity)。我都虚拟机是android 7.0的,而真机是android5.1.1的。所以虚拟机正常运行而真机不能运行。所以后来添加上
@Override    public void onAttach(Activity activity) {        Log.i("---LK---", "onAttach");        mCallBack = (OnWineListFragmentClickListener) getActivity();        super.onAttach(activity);    }

程序正常运行。至此,问题解决。
使用的代码
if (mi1 == 0) {                        mCallBack.onAddClick(encryption);                    } else {//加密                        mCallBack.onAddClick(input_password);                    }

 public interface OnWineListFragmentClickListener {        void onAddClick(String text);    }



0 0
原创粉丝点击