Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Kotlin: Can we use @Subscribe of EventBus (GreenRobot) in Kotlin?

My onEvent in a fragment as below, capturing the authentication of the activity, in my Kotlin function. However, I can't get that onEvent triggered.

@Subscribe
fun onEvent(event: AuthenticationEvent) {
    if (event.isAuthenticated) {
        startFragment(signInFragment, SignInFragment.TAG)
    } else {
        startFragment(signOutFragment, SignOutFragment.TAG)
    }
}

In my build.gradle file, I have add this

compile 'org.greenrobot:eventbus:3.0.0'

Is there anything I need to do to get this trigger?

like image 446
Elye Avatar asked Apr 20 '16 12:04

Elye


2 Answers

To use annotation processors with Kotlin, you need to use the Kotlin Annotation Processor tool (kapt).

Add this to your build.gradle:

apply plugin: 'kotlin-kapt'

According to GreenRobot (and confirmed by my testing), this is all you need to get @Subscribe.

like image 162
PLNech Avatar answered Nov 12 '22 16:11

PLNech


  1. Make sure your event handler function with @Subscribe annotation is public
  2. In the build.gradle file add the code:

    apply plugin: 'kotlin-kapt'
    
    implementation "org.greenrobot:eventbus:3.0.0"
    kapt 'org.greenrobot:eventbus-annotation-processor:3.0.1'
    
  3. If you want to use Subscriber Index, you add the code to build.gradle too:

    kapt { arguments { arg('eventBusIndex', 'your-package.MyEventBusIndex') } }

like image 45
SpkingR Avatar answered Nov 12 '22 16:11

SpkingR