web-dev-qa-db-fra.com

ButterKnife 8.0.1 ne fonctionne pas

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

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

c'est mon Main Class: _ (J'ai écrit l'inclus 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 c'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" />
58

Pour le readme , vous devez inclure le butterknife-compiler Pour que le code généré soit produit 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.

147
Jake Wharton

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.

6
Dmitry

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
5
SpyZip
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
    }
}
5
V.Soni

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.

3
Luna Kong

J'ai eu ce problème aussi, simplement parce que j'ai ajouté butterknife de Android Gestion de la dépendance de Studio et non en copiant-collant les lignes de niveaux depuis le site Web de Butterknife. J'ai donc dû ajouter compile 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' au lieu de juste compile 'com.jakewharton:butterknife:8.5.1'

2
ViliusK

Si vous utilisez Kotlin:

assurez-vous d'utiliser cette dépendance dans l'application du module:

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

Ajouter annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0' Dans votre fichier de notes cela a fonctionné pour moi

0

De Jake Wharton

Oui, ce plugin n'est plus nécessaire. Vous utilisez déjà annotationProcessor pour l'artefact 'butterknife-compiler' intégré au Android plug-in Gradle.

Ensuite, la solution est de supprimer apt classpath 'com.neenbedankt.gradle.plugins: Android-apt: 1.8'

0
Pablo Cegarra

Je viens de faire face à ce problème, après avoir mis à jour mon projet avec la version Gradle 3.0.1. J'ai pu résoudre ce problème en incluant simplement dans le fichier Gradle app la ligne:

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

Le résultat final était:

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

J'espère que cela aide quelqu'un, bien que cette question soit ancienne.

0
GuilhermeFGL