ButterKnife 8.0.1 not working

AndroidNullpointerexceptionButterknife

Android Problem Overview


I am using butterknife 8.0.1, but a nullpointerexception is appearing.

This line is on my build.grade file: compile 'com.jakewharton:butterknife:8.0.1'

this is my Main Class: (I wrote the includes properly)

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");**
    }

and this is MainActivity.xml:

http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="base.hellobaytree.com.baseproject.MainActivity">

<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" />

Android Solutions


Solution 1 - Android

Per the readme, you need to include the butterknife-compiler in order for the generated code to be produced automatically:

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'
}

Without this there is no generated code to be loaded and thus none of the fields get set.

You can verify ButterKnife is working by calling ButterKnife.setDebug(true) and looking in Logcat.

Solution 2 - Android

I used this library in Fragment and has NPE. My code was:

ButterKnife.bind(view);

But it was wrong. Library need to know two objects:

  1. Target - with annotations @BindView
  2. Source - with views

It will be right to write:

ButterKnife.bind(this, view);

When this - your fragment, and view - view of this fragment.

Solution 3 - Android

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
    }
}

Solution 4 - Android

for me the problem was that I was using

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

instead of

 apt 'com.jakewharton:butterknife-compiler:8.7.0

Solution 5 - Android

Config Butterknife on build.gradle file like this,

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

It works for me.

Solution 6 - Android

I had this issue too, just because I've added butterknife from Android Studio's Dependency management and not by copy-pasting gradle lines from Butterknife website. So I had to add

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

instead of just

compile 'com.jakewharton:butterknife:8.5.1'

Solution 7 - Android

If you use kotlin:

make sure to use this dependency in module app:

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

Solution 8 - Android

From JakeWharton > Yes that plugin is no longer needed. You're already using > annotationProcessor for the 'butterknife-compiler' artifact which is > built-in to the Android Gradle plugin.

Then the solution is delete apt classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

Solution 9 - Android

Add annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0' In your gradle file it worked for me

Solution 10 - Android

I have just faced this problem, after updating my project to Gradle version 3.0.1. I was able to fix it by just including in Gradle app file the line:

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

The final result was:

    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'
    }

I hope this helps somebody, although this question being old.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSebastian CorradiView Question on Stackoverflow
Solution 1 - AndroidJake WhartonView Answer on Stackoverflow
Solution 2 - AndroidDmitryView Answer on Stackoverflow
Solution 3 - AndroidV.SoniView Answer on Stackoverflow
Solution 4 - AndroidSpyZipView Answer on Stackoverflow
Solution 5 - AndroidLuna KongView Answer on Stackoverflow
Solution 6 - AndroidViliusKView Answer on Stackoverflow
Solution 7 - AndroidJetwizView Answer on Stackoverflow
Solution 8 - AndroidPablo CegarraView Answer on Stackoverflow
Solution 9 - AndroidChinthaka DevindaView Answer on Stackoverflow
Solution 10 - AndroidGuilhermeFGLView Answer on Stackoverflow