I have been using EventBus since 2017 and I have been able to delivery excellent products to my customers using it. Thanks a lot for such a wonderful tool without which this was not possible.
Lately I have been trying to implement the following on Flutter
Here is the helpful stuff
On MainActivity.kt (extends FlutterActvity)
override fun onStart() {
if (!MySDK.getEventBus().isRegistered(this)) {
MySDK.getEventBus().register(this)
Log.i(TAG, "EVENT_BUS => MainActivity successfully register to event bus")
}
super.onStart()
}
@Subscribe(threadMode = ThreadMode.ASYNC)
public fun lookForChangeInEvents(event: Any){
Log.i(TAG!!, String.format("This is the following event %s", event.toString()))
}
The Error we experience is
Process: com.example.ruc_flutter, PID: 11824
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/window/BackEvent;
at java.lang.reflect.Executable.getParameterTypesInternal(Native Method)
at java.lang.reflect.Method.getParameterTypes(Method.java:186)
at org.greenrobot.eventbus.SubscriberMethodFinder.findUsingReflectionInSingleClass(SubscriberMethodFinder.java:173)
at org.greenrobot.eventbus.SubscriberMethodFinder.findUsingInfo(SubscriberMethodFinder.java:88)
at org.greenrobot.eventbus.SubscriberMethodFinder.findSubscriberMethods(SubscriberMethodFinder.java:64)
at org.greenrobot.eventbus.EventBus.register(EventBus.java:150)
at com.example.ruc_flutter.MainActivity.onStart(MainActivity.kt:45)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1455)
at android.app.Activity.performStart(Activity.java:8315)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4136)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8751)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.window.BackEvent" on path: DexPathList[[zip file "/data/app/~~f23eg9s3HO-H1f5vyz9yqw==/com.example.ruc_flutter-VO7Qr3chQxbW1v_Vz-0G_Q==/base.apk"],nativeLibraryDirectories=[/data/app/~~f23eg9s3HO-H1f5vyz9yqw==/com.example.ruc_flutter-VO7Qr3chQxbW1v_Vz-0G_Q==/lib/arm64, /data/app/~~f23eg9s3HO-H1f5vyz9yqw==/com.example.ruc_flutter-VO7Qr3chQxbW1v_Vz-0G_Q==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
at java.lang.ClassLoader.loadClass(ClassLoader.java:637)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at java.lang.reflect.Executable.getParameterTypesInternal(Native Method)
at java.lang.reflect.Method.getParameterTypes(Method.java:186)
at org.greenrobot.eventbus.SubscriberMethodFinder.findUsingReflectionInSingleClass(SubscriberMethodFinder.java:173)
at org.greenrobot.eventbus.SubscriberMethodFinder.findUsingInfo(SubscriberMethodFinder.java:88)
at org.greenrobot.eventbus.SubscriberMethodFinder.findSubscriberMethods(SubscriberMethodFinder.java:64)
at org.greenrobot.eventbus.EventBus.register(EventBus.java:150)
at com.example.ruc_flutter.MainActivity.onStart(MainActivity.kt:45)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1455)
at android.app.Activity.performStart(Activity.java:8315)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4136)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8751)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
We did check the following before coming to SO
Can someone help us understand what are we missing out or overlooking ?
I have been using EventBus since 2017 and I have been able to delivery excellent products to my customers using it. Thanks a lot for such a wonderful tool without which this was not possible.
Lately I have been trying to implement the following on Flutter
Here is the helpful stuff
On MainActivity.kt (extends FlutterActvity)
override fun onStart() {
if (!MySDK.getEventBus().isRegistered(this)) {
MySDK.getEventBus().register(this)
Log.i(TAG, "EVENT_BUS => MainActivity successfully register to event bus")
}
super.onStart()
}
@Subscribe(threadMode = ThreadMode.ASYNC)
public fun lookForChangeInEvents(event: Any){
Log.i(TAG!!, String.format("This is the following event %s", event.toString()))
}
The Error we experience is
Process: com.example.ruc_flutter, PID: 11824
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/window/BackEvent;
at java.lang.reflect.Executable.getParameterTypesInternal(Native Method)
at java.lang.reflect.Method.getParameterTypes(Method.java:186)
at org.greenrobot.eventbus.SubscriberMethodFinder.findUsingReflectionInSingleClass(SubscriberMethodFinder.java:173)
at org.greenrobot.eventbus.SubscriberMethodFinder.findUsingInfo(SubscriberMethodFinder.java:88)
at org.greenrobot.eventbus.SubscriberMethodFinder.findSubscriberMethods(SubscriberMethodFinder.java:64)
at org.greenrobot.eventbus.EventBus.register(EventBus.java:150)
at com.example.ruc_flutter.MainActivity.onStart(MainActivity.kt:45)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1455)
at android.app.Activity.performStart(Activity.java:8315)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4136)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8751)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.window.BackEvent" on path: DexPathList[[zip file "/data/app/~~f23eg9s3HO-H1f5vyz9yqw==/com.example.ruc_flutter-VO7Qr3chQxbW1v_Vz-0G_Q==/base.apk"],nativeLibraryDirectories=[/data/app/~~f23eg9s3HO-H1f5vyz9yqw==/com.example.ruc_flutter-VO7Qr3chQxbW1v_Vz-0G_Q==/lib/arm64, /data/app/~~f23eg9s3HO-H1f5vyz9yqw==/com.example.ruc_flutter-VO7Qr3chQxbW1v_Vz-0G_Q==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
at java.lang.ClassLoader.loadClass(ClassLoader.java:637)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at java.lang.reflect.Executable.getParameterTypesInternal(Native Method)
at java.lang.reflect.Method.getParameterTypes(Method.java:186)
at org.greenrobot.eventbus.SubscriberMethodFinder.findUsingReflectionInSingleClass(SubscriberMethodFinder.java:173)
at org.greenrobot.eventbus.SubscriberMethodFinder.findUsingInfo(SubscriberMethodFinder.java:88)
at org.greenrobot.eventbus.SubscriberMethodFinder.findSubscriberMethods(SubscriberMethodFinder.java:64)
at org.greenrobot.eventbus.EventBus.register(EventBus.java:150)
at com.example.ruc_flutter.MainActivity.onStart(MainActivity.kt:45)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1455)
at android.app.Activity.performStart(Activity.java:8315)
at android.app.ActivityThread.handleStartActivity(ActivityThread.java:4136)
at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8751)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
We did check the following before coming to SO
Can someone help us understand what are we missing out or overlooking ?
Just register that Subscriber through a different class and not from MainActivity,
make a class EventLogger.java
public class EventLogger {
public static final String TAG = EventLogger.class.getSimpleName();
public EventLogger() {
MySDK.getEventBus().register(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onSomeEvent(SomeEvent event) {
Log.d(TAG, "onLocationChangeEvent Started " + event.toString());
MainActivity.Companion.getEventSink().success("The event is triggered");
Log.d(TAG, "SomeEvent Ended");
}
public void unregister() {
EventBus.getDefault().unregister(this);
}
}
Make sure to have a public constructor through which you can send back the event triggers in Flutter Event Channel
class MainActivity: FlutterActivity() {
companion object {
var eventSink: EventChannel.EventSink? = null
}
private lateinit var eventLogger: EventLogger
override fun onDestroy() {
eventLogger.unregister()
super.onDestroy()
}
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
eventLogger = EventLogger()
EventChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL_EVENTS).setStreamHandler(object : EventChannel.StreamHandler{
override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {
Log.i(TAG, "GT LOGGER => Event Channel for flutter is triggered")
eventSink = events
}
override fun onCancel(arguments: Any?) {
eventSink = null
}
})
}
}