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" />
Ответы
Ответ 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'
}