Sebastian Corradi Sebastian Corradi - 2 months ago 9
Android Question

ButterKnife 8.0.1 not working

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
:




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



Answer

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.