Использование библиотеки Butter Knife для внедрения представлений

Что я делаю::

  1. Я пытаюсь запустить библиотеку ножей для масла для своего простого проекта.
  2. Я выполнил все шаги в документации, но все равно получаю ошибки журнала
  3. Как я могу решить эту проблему, я пропустил какой-либо шаг
  4. Я также добавил банку в папку libs

MainActivity.java

package com.example.butterknife;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import butterknife.ButterKnife;
import butterknife.InjectView;

public class MainActivity extends Activity {

    @InjectView(R.id.txtID) TextView title;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.inject(this);
        title.setText("Hello Everyone !!");

    }
}

Журнал::

04-15 11:50:57.845: E/AndroidRuntime(913): FATAL EXCEPTION: main
04-15 11:50:57.845: E/AndroidRuntime(913): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.butterknife/com.example.butterknife.MainActivity}: java.lang.NullPointerException
04-15 11:50:57.845: E/AndroidRuntime(913):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
04-15 11:50:57.845: E/AndroidRuntime(913):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
04-15 11:50:57.845: E/AndroidRuntime(913):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
04-15 11:50:57.845: E/AndroidRuntime(913):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
04-15 11:50:57.845: E/AndroidRuntime(913):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-15 11:50:57.845: E/AndroidRuntime(913):  at android.os.Looper.loop(Looper.java:137)
04-15 11:50:57.845: E/AndroidRuntime(913):  at android.app.ActivityThread.main(ActivityThread.java:4340)
04-15 11:50:57.845: E/AndroidRuntime(913):  at java.lang.reflect.Method.invokeNative(Native Method)
04-15 11:50:57.845: E/AndroidRuntime(913):  at java.lang.reflect.Method.invoke(Method.java:511)
04-15 11:50:57.845: E/AndroidRuntime(913):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-15 11:50:57.845: E/AndroidRuntime(913):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-15 11:50:57.845: E/AndroidRuntime(913):  at dalvik.system.NativeStart.main(Native Method)
04-15 11:50:57.845: E/AndroidRuntime(913): Caused by: java.lang.NullPointerException
04-15 11:50:57.845: E/AndroidRuntime(913):  at com.example.butterknife.MainActivity.onCreate(MainActivity.java:19)
04-15 11:50:57.845: E/AndroidRuntime(913):  at android.app.Activity.performCreate(Activity.java:4465)
04-15 11:50:57.845: E/AndroidRuntime(913):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
04-15 11:50:57.845: E/AndroidRuntime(913):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
04-15 11:50:57.845: E/AndroidRuntime(913):  ... 11 more
04-15 11:51:06.722: I/Process(913): Sending signal. PID: 913 SIG: 9

person Devrath    schedule 15.04.2014    source источник
comment
похоже, что title имеет значение null, в него ничего не вводили.   -  person Anantha Sharma    schedule 15.04.2014


Ответы (3)


Выполните следующие шаги [в Eclipse IDE]:

1) Щелкните правой кнопкой мыши свой проект в проводнике пакетов. Добрался до Java Compiler --> Annotation Processing и проверил Enable project specific settings.

2) Разверните раздел Annotation Processing и выберите Factory Path. Отметьте Enable project specific settings, а затем нажмите Add JARs. Перейдите к папке libs/ проекта и выберите банку ButterKnife.

3)Нажмите Ok, чтобы сохранить новые настройки. Eclipse попросит вас пересобрать проект, для чего нужно нажать Yes.

Примечание. Убедитесь, что папка .apt_generated/ находится в корне вашего проекта. Он должен содержать такие файлы, как YOURACTIVITY$$ViewInjector.java. Если эти файлы отсутствуют, запустите чистую сборку, выбрав «Проект» → «Очистить». Эта папка и файлы не должны возвращаться в систему контроля версий.

Справочник -> Настроить ручную настройку аннотаций ButterKnife

person nitesh    schedule 15.04.2014
comment
Спасибо, что указали мне на Документацию ... Я тоже смог ее решить [+1]! - person Devrath; 15.04.2014
comment
@Casper Люблю помогать :) - person nitesh; 15.04.2014
comment
Опция обработки аннотаций не существовала в моей установке Eclipse, и мне пришлось следовать работе здесь stackoverflow.com/a/26028701/329034 - person mbwasi; 02.10.2014
comment
Там нет такого понятия, как Java Compiler. - person IgorGanapolsky; 30.06.2015
comment
У меня не работает =( Я выполнил шаги в Eclipse, но из Примечание: убедитесь, что папка .apt_generated/ находится в корне вашего проекта... - я не вижу папки с именем apt-generated в моем корне проекта, и ошибки не исчезают. - person Solace; 21.07.2015

IntelliJ IDEA. Если в вашем проекте используется внешняя конфигурация (например, Maven pom.xml), то обработка аннотаций должна работать.

Следуй этим шагам :

  1. Откройте настройки IDEA: File -> Other Settings -> Default Settings
  2. Перейдите к Compiler -> Annotation Processors Затем проверьте Enable annotation processing

Справочник -> Настройка аннотаций ButterKnife вручную

Обновление от 30 июня 2015 г.

Выполните следующие действия для Intellij IDEA 14.0:

  1. Откройте настройки IDEA: File -> Settings или нажмите ctl + alt + s

  2. Перейдите к Build, Execution and deployment -> Compiler -> Annotation Processors и выберите свой проект. Затем проверьте Enable annotation processing

person ahmed hamdy    schedule 04.11.2014
comment
Может быть лучше использовать Файл - Настройки вместо Файл - Настройки по умолчанию. А для IntelliJ IDEA 14.1 диалог настроек стал на один уровень глубже, так что это Сборка, Выполнение, Развертывание - Компилятор - Процессоры аннотаций. - person RenniePet; 25.05.2015
comment
Это уже не вариант. - person IgorGanapolsky; 30.06.2015
comment
@IgorGanapolsky откройте вкладку Compiler и выберите Annotation Processors . Другой способ: откройте диалоговое окно Setting и найдите Annotation Processors. - person ahmed hamdy; 01.07.2015
comment
@ahmedhamdy К сожалению, это не вариант в последней сборке Android Studio Canary. - person IgorGanapolsky; 01.07.2015

@Bind заменяет @InjectView и @InjectViews. ButterKnife.bind и ButterKnife.unbind заменяют ButterKnife.inject и ButterKnife.reset соответственно.

посмотрите на это: @InjectView заменен...

person Adnan Abdollah Zaki    schedule 05.10.2015