ButterKnife 8.0.1无法正常工作

时间:2016-05-03 20:19:23

标签: android nullpointerexception butterknife

我正在使用butterknife 8.0.1,但正在显示nullpointerexception

这一行在我的build.grade文件中:         compile 'com.jakewharton:butterknife:8.0.1'

这是我的Main Class:(我正确地写了包含)

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends BaseActivity {

    @BindView(R.id.MainScreenTextView) TextView mainText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

        **mainText.setText("Butter knife is working fine");**
    }

这是MainActivity.xml

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:orientation="vertical">

    <TextView
        android:id="@+id/MainScreenTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="This is the Main Screen"
        android:textColor="#000000"
        android:background="#666666"
        android:padding="5dp"
        android:textSize="20dp"/>
</LinearLayout>

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/fab_margin"
    android:src="@android:drawable/ic_dialog_email" />

10 个答案:

答案 0 :(得分:147)

the readme,您需要包含butterknife-compiler,以便自动生成生成的代码:

buildscript {
  repositories {
    mavenCentral()
   }
  dependencies {
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  }
}

apply plugin: 'com.neenbedankt.android-apt'

dependencies {
  compile 'com.jakewharton:butterknife:8.0.1'
  apt 'com.jakewharton:butterknife-compiler:8.0.1'
}

如果没有这个,就不会加载生成的代码,因此不会设置任何字段。

您可以通过调用ButterKnife.setDebug(true)并查看Logcat来验证ButterKnife是否正常工作。

答案 1 :(得分:6)

我在Fragment中使用了这个库并且有NPE。我的代码是:

ButterKnife.bind(view);

但这是错的。图书馆需要知道两个对象:
1)目标 - 带注释@BindView
2)来源 - 有意见

写这是对的:

ButterKnife.bind(this, view);

当这个 - 您的片段和视图 - 查看此片段时。

答案 2 :(得分:5)

App Level(build.gradle)

apply plugin: 'android-apt'
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'
    compile 'com.jakewharton:butterknife:8.4.0'
    apt 'com.jakewharton:butterknife-compiler:8.4.0'
}


Project Level(build.gradle)

buildscript {
    repositories {
        jcenter()
    }
    dependencies {

        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

答案 3 :(得分:5)

对我来说问题是我正在使用

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

而不是

 apt 'com.jakewharton:butterknife-compiler:8.7.0

答案 4 :(得分:2)

我也遇到过这个问题,因为我已经从Android Studio的依赖管理中添加了大量刀具,而不是通过Butterknife网站的复制粘贴gradle行。 所以我不得不补充一下 compile 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' 而不仅仅是 compile 'com.jakewharton:butterknife:8.5.1'

答案 5 :(得分:2)

在这样的build.gradle文件上配置Butterknife,

compile("com.jakewharton:butterknife:8.5.1")
annotationProcessor "com.jakewharton:butterknife-compiler:8.5.1"

它对我有用。

答案 6 :(得分:0)

来自JakeWharton

  

是的,不再需要插件。你已经在使用了   用于'butterknife-compiler'工件的annotationProcessor   内置于Android Gradle插件。

然后解决方案是删除apt classpath'com.neenbedankt.gradle.plugins:android-apt:1.8'

答案 7 :(得分:0)

添加annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'在您的gradle文件中,它对我有用

答案 8 :(得分:0)

我将项目更新为Gradle版本3.0.1后,我刚遇到此问题。我能够通过在Gradle app文件中包含以下行来修复它:

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

最终结果是:

    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })

        ...

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

我希望这对某人有所帮助,尽管这个问题已经过时了。

答案 9 :(得分:0)

如果您使用Kotlin:

确保在模块应用中使用此依赖项:

dependencies {
   implementation 'com.jakewharton:butterknife:10.0.0'
   kapt 'com.jakewharton:butterknife-compiler:10.0.0'
}