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" />
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.
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.
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
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
}
}
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.
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'
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'
}
Ajouter annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
Dans votre fichier de notes cela a fonctionné pour moi
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'
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.