黄油刀 return 空指针
Butter Knife return null pointer
我想在我的 project.I 中使用 Butter Knife 根据 Butter Knife 教程完成所有操作。
但是当我对视图进行任何设置时(setText、setClickListener ...)我得到了空对象引用异常。
这是我的代码:
public class LoginActivity extends AppCompatActivity implements LoginView, View.OnClickListener {
@BindView(R.id.acEtUsername) AppCompatEditText userName;
@BindView(R.id.acEtPassword) AppCompatEditText password;
@BindView(R.id.prgCheckLogin) ProgressBar prgCheckLogin;
@BindView(R.id.btnLogin) Button btnLogin;
LoginPresenter loginPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ButterKnife.bind(this);
ButterKnife.setDebug(true);
loginPresenter = new LoginPresenterImpl(this);
btnLogin.setOnClickListener(this); // or userName.setText("userName");
}
/** Other Methods **/
activity_login.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<android.support.v7.widget.AppCompatEditText
android:id="@+id/acEtUsername"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginRight="32dp"
android:layout_marginLeft="32dp"
android:hint="@string/user_name"/>
<android.support.v7.widget.AppCompatEditText
android:id="@+id/acEtPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginTop="8dp"
android:layout_marginRight="32dp"
android:layout_marginLeft="32dp"
android:hint="@string/password"/>
<Button
android:id="@+id/btnLogin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="8dp"
android:text="@string/login"/>
<ProgressBar
android:id="@+id/prgCheckLogin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_gravity="center|bottom"/>
</LinearLayout>
和错误日志
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.AppCompatEditText.setText(java.lang.CharSequence)' on a null object reference
我的代码有什么问题?
谢谢
我修好了。
我的build.gradle
有问题
忘记补充了
apt 'com.jakewharton:butterknife-compiler:8.0.1'
到build.gradle
谢谢大家
更新
如果您正在使用 neenbedankt.android-apt
插件,请先将其删除。
然后移除apt 'com.jakewharton:butterknife-compiler:8.0.1'
然后将annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
添加到依赖项中。
更新 2
如果您正在使用 kotlin 替换:
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
与:
kapt 'com.jakewharton:butterknife-compiler:8.8.1'
别忘了添加
apply plugin: 'kotlin-kapt'
之后:
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
是的,Jake Wharton 的 Butterknife 已更新到 8.0.1
请参阅他的 git 帐户了解步骤 Butterknife Git
最后一点:
确保行 apply plugin ... 位于文件顶部的某个位置。
我遇到了同样的异常。就我而言,我忘记在我的 app-module build.gradle
文件中添加 jcenter()
存储库。
buildscript {
repositories {
mavenCentral()
//this was missed
jcenter()
}
dependencies {
...
}
}
在您的 onCreate
方法中,确保您有以下行:
ButterKnife.bind(this);
没有该行,您设置的绑定将不会执行,视图将保持为空。
如果您使用的是新的 Butter Knife 版本,请使用以下命令:
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
If you are using Kotlin, replace annotationProcessor
with kapt
.
更新:
如果您在项目中使用 Gradle 插件 3.0 或更高版本,请将 compile
更改为 implementation
。如下所示:
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
当我在现有项目上添加对 DataBinding 和 Kotlin 的支持时,我开始遇到 NPE 错误。
我有:
annotationProcessor 'com.jakewharton:butterknife-compiler:x.x.x'
..并替换为:
kapt "com.jakewharton:butterknife-compiler:x.x.x"
我想在我的 project.I 中使用 Butter Knife 根据 Butter Knife 教程完成所有操作。 但是当我对视图进行任何设置时(setText、setClickListener ...)我得到了空对象引用异常。
这是我的代码:
public class LoginActivity extends AppCompatActivity implements LoginView, View.OnClickListener {
@BindView(R.id.acEtUsername) AppCompatEditText userName;
@BindView(R.id.acEtPassword) AppCompatEditText password;
@BindView(R.id.prgCheckLogin) ProgressBar prgCheckLogin;
@BindView(R.id.btnLogin) Button btnLogin;
LoginPresenter loginPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ButterKnife.bind(this);
ButterKnife.setDebug(true);
loginPresenter = new LoginPresenterImpl(this);
btnLogin.setOnClickListener(this); // or userName.setText("userName");
}
/** Other Methods **/
activity_login.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<android.support.v7.widget.AppCompatEditText
android:id="@+id/acEtUsername"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginRight="32dp"
android:layout_marginLeft="32dp"
android:hint="@string/user_name"/>
<android.support.v7.widget.AppCompatEditText
android:id="@+id/acEtPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginTop="8dp"
android:layout_marginRight="32dp"
android:layout_marginLeft="32dp"
android:hint="@string/password"/>
<Button
android:id="@+id/btnLogin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="8dp"
android:text="@string/login"/>
<ProgressBar
android:id="@+id/prgCheckLogin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_gravity="center|bottom"/>
</LinearLayout>
和错误日志
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.AppCompatEditText.setText(java.lang.CharSequence)' on a null object reference
我的代码有什么问题?
谢谢
我修好了。
我的build.gradle
有问题忘记补充了
apt 'com.jakewharton:butterknife-compiler:8.0.1'
到build.gradle
谢谢大家
更新
如果您正在使用 neenbedankt.android-apt
插件,请先将其删除。
然后移除apt 'com.jakewharton:butterknife-compiler:8.0.1'
然后将annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
添加到依赖项中。
更新 2
如果您正在使用 kotlin 替换:
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
与:
kapt 'com.jakewharton:butterknife-compiler:8.8.1'
别忘了添加
apply plugin: 'kotlin-kapt'
之后:
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
是的,Jake Wharton 的 Butterknife 已更新到 8.0.1
请参阅他的 git 帐户了解步骤 Butterknife Git
最后一点: 确保行 apply plugin ... 位于文件顶部的某个位置。
我遇到了同样的异常。就我而言,我忘记在我的 app-module build.gradle
文件中添加 jcenter()
存储库。
buildscript {
repositories {
mavenCentral()
//this was missed
jcenter()
}
dependencies {
...
}
}
在您的 onCreate
方法中,确保您有以下行:
ButterKnife.bind(this);
没有该行,您设置的绑定将不会执行,视图将保持为空。
如果您使用的是新的 Butter Knife 版本,请使用以下命令:
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
If you are using Kotlin, replace
annotationProcessor
withkapt
.
更新:
如果您在项目中使用 Gradle 插件 3.0 或更高版本,请将 compile
更改为 implementation
。如下所示:
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
当我在现有项目上添加对 DataBinding 和 Kotlin 的支持时,我开始遇到 NPE 错误。
我有:
annotationProcessor 'com.jakewharton:butterknife-compiler:x.x.x'
..并替换为:
kapt "com.jakewharton:butterknife-compiler:x.x.x"