web-dev-qa-db-fra.com

Couteau à beurre retour pointeur null

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

14
FarshidABZ

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.

27
FarshidABZ

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 par kapt.

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'
10
Darush

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.

9
Jerry Frost

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.

2
ralphgabb

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 {
        ...
    }
}
0
Jackky777

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"

0