Подтвердить что ты не робот

ButterKnife 8.0.1 не работает

Я использую butterknife 8.0.1, но появляется nullpointerexception.

Эта строка находится в файле build.grade:       compile 'com.jakewharton:butterknife:8.0.1'

это мой Main Class: (я правильно написал его)

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");**
    }

и это 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" />

4b9b3361

Ответ 1

Per readme, вам нужно включить butterknife-compiler для автоматического создания сгенерированного кода:

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

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

Вы можете проверить, работает ли ButterKnife, вызывая ButterKnife.setDebug(true) и глядя в Logcat.

Ответ 2

Я использовал эту библиотеку в Fragment и имеет NPE. Мой код:

ButterKnife.bind(view);

Но это было неправильно. Библиотека должна знать два объекта:
1) Цель - с аннотациями @BindView
2) Источник - с представлениями

Правильно будет писать:

ButterKnife.bind(this, view);

Когда это - ваш фрагмент и вид - просмотр этого фрагмента.

Ответ 3

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

Ответ 4

для меня проблема заключалась в том, что я использовал

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

вместо

 apt 'com.jakewharton:butterknife-compiler:8.7.0

Ответ 5

У меня тоже была эта проблема, потому что я добавил butterknife из управления Android Studio Dependency, а не путем вставки gradle строк с сайта Butterknife. Поэтому мне пришлось добавить compile 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' а не просто compile 'com.jakewharton:butterknife:8.5.1'

Ответ 6

Конфиг Butterknife на файл build.gradle, как это,

compile("com.jakewharton:butterknife:8.5.1")
annotationProcessor "com.jakewharton:butterknife-compiler:8.5.1"

Меня устраивает.

Ответ 7

От JakeWharton

Да, этот плагин больше не нужен. Вы уже используете annotationProcessor для артефакта 'butterknife-compiler', который встроенный в плагин Android Gradle.

Тогда решением будет удалить apt classpath 'com.neenbedankt.gradle.plugins: android-apt: 1.8'

Ответ 8

Добавьте annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0' В вашем файле gradle это сработало для меня

Ответ 9

Я только что столкнулся с этой проблемой после обновления моего проекта до Gradle версии 3.0.1. Я смог исправить это, просто включив в файл Gradle app строку:

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

Конечный результат:

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

Надеюсь, это поможет кому-то, хотя этот вопрос старый.

Ответ 10

Если вы используете kotlin:

убедитесь, что используете эту зависимость в модуле приложения:

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