Greenrobot Android Eventbus - никакой параметр eventbusindex не передается процессору аннотаций
Я пытаюсь настроить простого подписчика в моем приложении Android с помощью Eventbus от Greenrobot, но получаю ошибку сборки gradle. Я показал мой код ниже.
Класс мероприятия
public final class OffersProcessedEvent {}
Базовый фрагмент
public class BaseFragment extends Fragment {
private boolean registered;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
EventBus.getDefault().register(this);
registered = true;
}
@Override
public void onResume() {
super.onResume();
if (!registered) {
EventBus.getDefault().register(this);
registered = true;
}
}
@Override
public void onPause() {
super.onPause();
EventBus.getDefault().unregister(this);
registered = false;
}
public AppCompatActivity getAppCompatActivity() {
return (AppCompatActivity) getActivity();
}
}
Событие пост'
EventBus.getDefault().post(new OffersProcessedEvent());
Код подписки
@Subscribe
public void onMessageEvent(OffersProcessedEvent event){
*do whatever*
}
Ниже приведены мои ошибки
Ошибки сборки Gradle
Ошибка: нет опции eventBusIndex, переданного процессору аннотации
Ошибка: не удалось выполнить задачу ':app:compileDebugJavaWithJavac'.
Компиляция не удалась; см. вывод ошибки компилятора для деталей.
Gradle зависимости
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.android.support:appcompat-v7:26.+'
compile 'com.android.support:design:26.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
compile 'com.facebook.android:facebook-android-sdk:4.5.0'
compile 'com.jakewharton:butterknife:8.6.0'
compile 'com.jakewharton:butterknife-compiler:8.6.0'
compile 'com.jakewharton:butterknife:8.7.0'
compile 'com.jakewharton:butterknife-compiler:8.7.0'
compile 'com.github.bumptech.glide:glide:3.5.2'
compile 'com.android.support:cardview-v7:26.0.0-alpha1'
compile 'com.google.code.gson:gson:2.8.1'
compile 'org.greenrobot:eventbus:3.0.0'
compile 'org.greenrobot:eventbus-annotation-processor:3.0.1'
}
2 ответа
apply plugin: 'kotlin-kapt' // ensure kapt plugin is applied
dependencies {
implementation 'org.greenrobot:eventbus:3.1.1'
kapt 'org.greenrobot:eventbus-annotation-processor:3.1.1'
}
kapt {
arguments {
arg('eventBusIndex', 'com.example.myapp.MyEventBusIndex')
}
}
База по этой ссылке http://greenrobot.org/eventbus/documentation/faq/
Это происходит, когда вы настраиваете скрипт сборки, и вы еще не добавили аннотации к своему коду. Без каких-либо аннотаций @Subscribe обработчик аннотаций для индексирования не будет запущен для использования опции 'eventBusIndex'. Итак, просто добавьте аннотации @Subscribe, и все будет в порядке.
Так что вы должны добавить
@Subscribe
fun onEvent(event: SomeEvent) {
}
Но вы стали получать Error:No option eventBusIndex passed to annotation processor
Добавьте это к вашему app.gradle
При использовании annotationProcessor
defaultConfig {
//other code
javaCompileOptions {
annotationProcessorOptions {
arguments = [eventBusIndex: "com.example.myapp.MyEventBusIndex"]
}
}
}
При использовании капт
dependencies {
//other codes
}
kapt {
arguments {
arg('eventBusIndex', 'com.example.myapp.MyEventBusIndex')
}
}
И если с помощью Android-APT
dependencies {
//other codes
}
apt {
arguments {
eventBusIndex "com.example.myapp.MyEventBusIndex"
}
}
Надеюсь, это поможет