butterknife是大家熟悉的一款view注入框架,这里就不多做介绍。
今天在一个自定义view的地方使用butterknife,设置点击按钮的时候发生的一个异常
代码如下:
public class Title extends RelativeLayout {
@Bind(R.id.tv_title_right)
TextView tvTitleRight;
public Title(Context context, AttributeSet attrs) {
super(context, attrs);
View view = LayoutInflater.from(context).inflate(R.layout.title, this);
}
public void setRightOnClick(OnClickListener click) {
tvTitleRight.setOnClickListener(click);
}
}
布局太简单就不贴出,异常如下:
ava.lang.RuntimeException: Unable to start activity ComponentInfo{com.mrsphoto.mrphoto/com.mrsphoto.mrphoto.activity.LiveActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void'android.widget.TextView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at android.app
…………………………………………省略…………………………………………
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
可以看到是在调用setOnClickListener这个方法的时候报了空指针异常,但是setRightOnClick里的tvTitleRight应该已经通过butterknife实例化过了,不应该是空值。于是检查一遍写法,使用Butterknife Zelezny重新生成了一下代码,然后clean。重新运行,还是会出现异常。
于是手动写了一遍findviewbyid:
View view = LayoutInflater.from(context).inflate(R.layout.title, this);
tvTitleRight= (TextView) view.findViewById(R.id.tv_title_right);
然后重新运行,终于正常运行。
看了一下官网的文档http://jakewharton.github.io/butterknife/并没有找到解决方法,如果有解决方法请指出。

本文记录了一次使用ButterKnife框架进行View注入时遇到的NullPointerException异常,并详细分析了解决过程。作者通过手动findViewById解决了问题,为遇到类似情况的开发者提供了一个可行的解决方案。

1704

被折叠的 条评论
为什么被折叠?



