butterknife8.4空指针异常的解决方法及使用详解
2017-01-21 00:11
453 查看
ButterKnife是一个专注于Android系统的View注入框架,可以减少大量的findViewById以及setOnClickListener代码,可视化一键生成。
ButterKnife
优势:
1、强大的View绑定和Click事件处理功能,简化代码,提升开发效率
2、方便的处理Adapter里的ViewHolder绑定问题
3、运行时不会影响APP效率,使用配置方便
4、代码清晰,可读性强
如何在项目中使用ButterKnife呢
首先在gradle配置文件中引入ButterKnife库依赖,这里在两个gradle文件中都要配置,注意红色部分为新加的配置,分别如下:
Project的gradle中:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
classpath 'com.github.dcendents:android-maven-plugin:1.2'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
maven { url("https://oss.sonatype.org/content/repositories/snapshots/") }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
在app的gradle中:
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
android {
compileSdkVersion 23
buildToolsVersion '23.0.3'
defaultConfig {
applicationId "dj.newsapp"
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile 'junit:junit:4.12'
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.4.0'
compile 'com.alibaba:fastjson:1.2.17'
compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:design:23.4.0'
compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
}
之前没有加 apply plugin: 'com.neenbedankt.android-apt' 导致无法添加 :
------------------------- 注意 -----------------
在ButterKnife 7.0.1中绑定View是用Bind(R.id.XXX)的方法;在8之后是用BindView(R.id.XXX)
配置好了,下面是如何使用ButterKnife注解。
Activity中绑定
1.绑定View:
a.绑定一个控件
:
// 定义控件并绑定
@BindView(控件的id)
public
Button
button1 ;
//
onCreate()方法中初始化ButterKnife:
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
b.绑定多个控件:
@BindViews({控件1的id,控件2的id})
@BindViews({
R.id.button1
, R.id.button2
, R.id.button3
})
public
List<Button>
buttonList ;
Fragment中绑定
前面一样,oncreate()中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_butterknife, container, false);
//绑定fragment
ButterKnife.bind( this , view ) ;
button1.setText( "I am a button ");
return view ;
}
2 @BindString() :绑定string 字符串
@BindString( R.string.titleStr; ) //绑定string 字符串
String titleStr;
3
@BindArray() : 绑定string里面array数组
<resources>
<string-array name="city">
<item>北京市</item>
<item>上海市</item>
<item>广州市</item>
<item>深圳市</item>
</string-array>
</resources>
@BindArray(R.array.city
) //绑定string里面array数组
String
[] citys ;
button1.setText(
citys[0]
);
4.@BindBitmap( ) : 绑定Bitmap 资源
@BindBitmap( R.mipmap.icon ) //绑定Bitmap 资源
public Bitmap wifi_bitmap ;
5.@BindColor( ) : 绑定一个颜色值
@BindColor( R.color.colorAccent )
int black ; //绑定一个颜色值
6.@OnClick( ) : 绑定控件点击事件
@OnLongClick( ) : 绑定控件长按事件
@OnClick(R.id.button1
) //给 button1 设置一个点击事件
@OnLongClick(
R.id.button1 )
public boolean showToast(){
Toast.makeText(this, "is a long click", Toast.LENGTH_SHORT).show();
return true ;
}
ButterKnife
优势:
1、强大的View绑定和Click事件处理功能,简化代码,提升开发效率
2、方便的处理Adapter里的ViewHolder绑定问题
3、运行时不会影响APP效率,使用配置方便
4、代码清晰,可读性强
如何在项目中使用ButterKnife呢
首先在gradle配置文件中引入ButterKnife库依赖,这里在两个gradle文件中都要配置,注意红色部分为新加的配置,分别如下:
Project的gradle中:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
classpath 'com.github.dcendents:android-maven-plugin:1.2'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
maven { url("https://oss.sonatype.org/content/repositories/snapshots/") }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
在app的gradle中:
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
android {
compileSdkVersion 23
buildToolsVersion '23.0.3'
defaultConfig {
applicationId "dj.newsapp"
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile 'junit:junit:4.12'
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.4.0'
compile 'com.alibaba:fastjson:1.2.17'
compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:design:23.4.0'
compile 'com.jakewharton:butterknife:8.4.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
}
之前没有加 apply plugin: 'com.neenbedankt.android-apt' 导致无法添加 :
apt 'com.jakewharton:butterknife-compiler:8.4.0'然后在给view事件设置操作时会报空指针异常!
------------------------- 注意 -----------------
在ButterKnife 7.0.1中绑定View是用Bind(R.id.XXX)的方法;在8之后是用BindView(R.id.XXX)
配置好了,下面是如何使用ButterKnife注解。
Activity中绑定
1.绑定View:
a.绑定一个控件
:
// 定义控件并绑定
@BindView(控件的id)
public
Button
button1 ;
//
onCreate()方法中初始化ButterKnife:
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
b.绑定多个控件:
@BindViews({控件1的id,控件2的id})
@BindViews({
R.id.button1
, R.id.button2
, R.id.button3
})
public
List<Button>
buttonList ;
Fragment中绑定
前面一样,oncreate()中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_butterknife, container, false);
//绑定fragment
ButterKnife.bind( this , view ) ;
button1.setText( "I am a button ");
return view ;
}
2 @BindString() :绑定string 字符串
@BindString( R.string.titleStr; ) //绑定string 字符串
String titleStr;
3
@BindArray() : 绑定string里面array数组
<resources>
<string-array name="city">
<item>北京市</item>
<item>上海市</item>
<item>广州市</item>
<item>深圳市</item>
</string-array>
</resources>
@BindArray(R.array.city
) //绑定string里面array数组
String
[] citys ;
button1.setText(
citys[0]
);
4.@BindBitmap( ) : 绑定Bitmap 资源
@BindBitmap( R.mipmap.icon ) //绑定Bitmap 资源
public Bitmap wifi_bitmap ;
5.@BindColor( ) : 绑定一个颜色值
@BindColor( R.color.colorAccent )
int black ; //绑定一个颜色值
6.@OnClick( ) : 绑定控件点击事件
@OnLongClick( ) : 绑定控件长按事件
@OnClick(R.id.button1
) //给 button1 设置一个点击事件
@OnLongClick(
R.id.button1 )
public boolean showToast(){
Toast.makeText(this, "is a long click", Toast.LENGTH_SHORT).show();
return true ;
}
相关文章推荐
- 使用getHibernateTemplate()的方法时出现空指针异常的解决办法
- 在使用Myeclipse时遇到由于删除action而引发的空指针异常问题的解决方法
- android studio使用ButterKnife 8.0.1报空指针错误以及点击事件无效的解决方法
- 使用butterknife bind之后依然运行报空指针问题解决方法
- android studio使用ButterKnife 8.0.1报空指针错误以及点击事件无效的解决方法
- 解决取消Notification调用cancelALl()方法时出现的空指针异常
- 多线程写文件异常(正由另一进程使用,因此该进程无法访问该文件)的解决方法
- 避免使用openurl时出现异常的解决方法
- 避免使用openurl时出现异常的解决方法
- 某APK中使用了动态注册BroadcastReceiver,Launcher中动态加载此APK出现java.lang.SecurityException异常的解决方法
- wp7使用POST请求Asp.net网页时,HttpWebRequest的BeginGetResponse方法抛出NotSupportException异常的解决方法
- 使用javascript:将其它类型值转换成布尔类型值的解决方法详解
- 多线程写文件异常(正由另一进程使用,因此该进程无法访问该文件)的解决方法
- 使用SQLDMO中“接口SQLDMO.Namelist 的 QueryInterface 失败”异常的解决方法
- Java EE 6.0使用JSTL常见异常解决方法
- spring 使用aop注解版会抛出奇怪的异常的解决方法
- .NET中使用P/Invoke 导致内存已损坏异常的一则解决方法
- 使用JDBC连接DB2时encoding not supported异常的解决方法
- 使用Eclipse进行Java开发,用SVN进行版本控制时的异常解决方法
- power point2003中播放幻灯片无法使用绘图笔指针的解决方法