Je veux utiliser Butter Knife dans mon projet.J'ai tout fait conformément au tutoriel Butter Knife . Mais lorsque j'ai défini quoi que ce soit sur les vues (setText, setClickListener ...), j'ai eu une exception de référence d'objet null.
Ceci est mon code:
public class LoginActivity extends AppCompatActivity implements LoginView, View.OnClickListener {
@BindView(R.id.acEtUsername) AppCompatEditText userName;
@BindView(R.id.acEtPassword) AppCompatEditText password;
@BindView(R.id.prgCheckLogin) ProgressBar prgCheckLogin;
@BindView(R.id.btnLogin) Button btnLogin;
LoginPresenter loginPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ButterKnife.bind(this);
ButterKnife.setDebug(true);
loginPresenter = new LoginPresenterImpl(this);
btnLogin.setOnClickListener(this); // or userName.setText("userName");
}
/** Other Methods **/
activity_login.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin">
<Android.support.v7.widget.AppCompatEditText
Android:id="@+id/acEtUsername"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:gravity="center"
Android:layout_marginRight="32dp"
Android:layout_marginLeft="32dp"
Android:hint="@string/user_name"/>
<Android.support.v7.widget.AppCompatEditText
Android:id="@+id/acEtPassword"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:gravity="center"
Android:layout_marginTop="8dp"
Android:layout_marginRight="32dp"
Android:layout_marginLeft="32dp"
Android:hint="@string/password"/>
<Button
Android:id="@+id/btnLogin"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:layout_margin="8dp"
Android:text="@string/login"/>
<ProgressBar
Android:id="@+id/prgCheckLogin"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:visibility="gone"
Android:layout_gravity="center|bottom"/>
</LinearLayout>
Et le journal des erreurs
Caused by: Java.lang.NullPointerException: Attempt to invoke virtual method 'void Android.support.v7.widget.AppCompatEditText.setText(Java.lang.CharSequence)' on a null object reference
Quel est le problème dans mon code?
Merci
Je l'ai corrigé.
Il y a un problème avec mon build.gradle
J'ai oublié d'ajouter
apt 'com.jakewharton:butterknife-compiler:8.0.1'
à la build.gradle
Merci à tous
METTRE &AGRAVE; JOUR
Si vous utilisez le plugin neenbedankt.Android-apt
, supprimez-le d'abord.
Puis supprimez apt 'com.jakewharton:butterknife-compiler:8.0.1'
Et ajoutez ensuite annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
aux dépendances.
Utilisez ce qui suit si vous utilisez la nouvelle version Butter Knife version:
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
Si vous utilisez Kotlin, remplacez
annotationProcessor
parkapt
.
METTRE À JOUR:
Si vous utilisez le plugin Gradle 3.0 ou supérieur dans votre projet, remplacez compile
par implementation
. comme ci-dessous:
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
Dans votre méthode onCreate
, assurez-vous que vous avez la ligne:
ButterKnife.bind(this);
Sans cette ligne, les liaisons que vous avez configurées ne sont pas effectuées et les vues restent nulles.
Oui, Butterknife par Jake Wharton a été mis à jour à 8.0.1
S'il vous plaît se référer à son compte git pour les étapes Butterknife Git
Sur la note finale: Assurez-vous que la ligne apply plugin ... est placée quelque part en haut du fichier.
J'ai la même exception. Dans mon cas, j'ai oublié d'ajouter le référentiel jcenter()
dans mon fichier build.gradle
du module d'application.
buildscript {
repositories {
mavenCentral()
//this was missed
jcenter()
}
dependencies {
...
}
}
J'ai commencé à avoir des erreurs NPE lorsque, sur un projet existant, j'ai ajouté le support pour DataBinding et Kotlin.
J'ai eu:
annotationProcessor 'com.jakewharton:butterknife-compiler:x.x.x'
..et remplacé par:
kapt "com.jakewharton:butterknife-compiler:x.x.x"