59 votes

ButterKnife 8.0.1 ne fonctionne pas

J'utilise butterknife 8.0.1 , mais un nullpointerexception apparaît.

Cette ligne se trouve sur mon fichier build.grade: compile 'com.jakewharton:butterknife:8.0.1'

ceci est mon Main Class: (j'ai écrit les includes correctement)

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

et ceci est 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" />
 

149voto

Jake Wharton Points 26095

Selon le readme , vous devez inclure les butterknife-compiler afin que le code généré soit généré automatiquement:

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

Sans cela, il n'y a pas de code généré à charger et aucun des champs n'est défini.

Vous pouvez vérifier que ButterKnife fonctionne en appelant ButterKnife.setDebug(true) et en consultant Logcat.

7voto

Dmitry Points 51

J'ai utilisé cette bibliothèque dans Fragment et possède NPE. Mon code était:

 ButterKnife.bind(view);
 

Mais c'était faux. La bibliothèque doit connaître deux objets:
1) Cible - avec des annotations @BindView
2) Source - avec vues

Il sera juste d'écrire:

 ButterKnife.bind(this, view);
 

Quand ceci - votre fragment, et vue - vue de ce fragment.

5voto

V.Soni Points 79
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
    }
}

5voto

SpyZip Points 448

pour moi le problème était que j'utilisais

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

au lieu de

  apt 'com.jakewharton:butterknife-compiler:8.7.0
 

3voto

Luna Kong Points 109

Config Butterknife sur le fichier build.gradle comme ceci,

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

Ça marche pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X