2016-04-28 4 views
9

Я хочу использовать Butter Knife в своем проекте. Я сделал все в соответствии с учебником Butter Knife. Но когда я устанавливаю что-либо в представления (setText, setClickListener ...), я получил исключение ссылки на исключение.Butter Knife return null pointer

Это мой код:

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> 

И ошибка журнала

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 

Что плохого в моем коде?

Thanks

+0

Можете ли вы предоставить 'activity_login.xml'? – nhaarman

+0

Можете ли вы разместить журнал ошибок слишком –

+0

@nhaarman activity_login.xml Добавлено – FarshidABZ

ответ

22

Я установил его.

Существует проблема с моим build.gradle

Я забыл добавить

apt 'com.jakewharton:butterknife-compiler:8.0.1' 

к build.gradle

Спасибо каждому

UPDATE

Если вы петь neenbedankt.android-apt плагин сначала удалите его.

Затем удалите apt 'com.jakewharton:butterknife-compiler:8.0.1'

А затем добавить annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' к зависимостям.

+0

Как вы побежали в первую очередь без зависимости –

2

Да, нож для масла Джейком Уортон был обновлен до 8.0.1

Пожалуйста, обратитесь в его мерзавца внимание на шаги Butterknife Git

На заключительной ноте: Убедитесь, что линия применить плагин ... помещается где-то в верхней части файла.

0

У меня такое же исключение. В моем случае я забыл добавить jcenter() репозиторий в свой файл app-module build.gradle.

buildscript { 
    repositories { 
     mavenCentral() 
     //this was missed 
     jcenter() 
    } 
    dependencies { 
     ... 
    } 
} 
5

В вашем методе onCreate, убедитесь, что у вас есть строка:

ButterKnife.bind(this); 

Без этой линии, оковы вы созданы не выполняются, а мнения остаются пустыми.

2

Используйте следующее, если ваш используют новую версию Butter Knife:

compile 'com.jakewharton:butterknife:8.8.1' 
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' 
+0

Я использую. новый, и у меня такая же ошибка. –

+1

@MaximeClaude Если вы используете Kotlin, замените annotationProcessor на kapt. Также убедитесь, что вы добавили обе строки. – Darush

+0

Спасибо за вход @Darush. Я только что обнаружил, что проблема в том, что я использую его из// активности/фрагмента. Я передаю представление конструктору этого класса и попытаюсь связать его там. Может быть, поэтому и не работает. –