黄油刀返回空指针

时间:2016-04-28 21:28:25

标签: android butterknife

我想在我的项目中使用Butter Knife。我根据Butter Knife教程做了一切。 但是当我向视图设置任何内容(setText,setClickListener ...)时,我得到了null对象引用异常。

这是我的代码:

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

我的代码出了什么问题?

由于

6 个答案:

答案 0 :(得分:27)

我修好了。

我的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' 添加到依赖项。

答案 1 :(得分:11)

onCreate方法中,请确保您拥有以下行:

ButterKnife.bind(this);

如果没有该行,则不执行您设置的绑定,并且视图保持为空。

答案 2 :(得分:10)

如果您使用新的Butter Knife版本,请使用以下内容:

compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
  

如果您使用 Kotlin ,请将annotationProcessor替换为kapt

<强>更新

如果您在项目中使用Gradle插件3.0或更高版本,请将compile更改为implementation。如下所示:

implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

答案 3 :(得分:2)

是的,杰克沃顿的Butterknife已经更新到8.0.1

请在他的git帐户中查看步骤Butterknife Git

最后说明: 确保行应用插件...放在文件顶部的某处。

答案 4 :(得分:0)

我得到了同样的例外。在我的情况下,我忘了在我的app-module jcenter()文件中添加build.gradle存储库。

buildscript {
    repositories {
        mavenCentral()
        //this was missed
        jcenter()
    }
    dependencies {
        ...
    }
}

答案 5 :(得分:0)

当在现有项目中添加对DataBinding和Kotlin的支持时,我开始收到NPE错误。

我有:

annotationProcessor 'com.jakewharton:butterknife-compiler:x.x.x'

..并替换为:

kapt "com.jakewharton:butterknife-compiler:x.x.x"