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

Надеюсь, это поможет

Другие вопросы по тегам