Android EventBus Subscriber class XXXActivity has no public methods called onEvent

错误信息:

Caused by: c.a.a.g: Subscriber class XXXActivity has no public methods called onEvent.

造成这个错误的原因有两个:

A:接受Event的页面,写了EventBus.getDefualt().register(this),但是在这个页面里却没有定义一个以 onEvent开头的、非静态的、public权限以及仅仅只有一个参数 的方法,也就是没有类似于:public void onEvent**(Object arg)这样的方法。

解决办法很简单,查看下该页面是否有必要onEvent**(Object arg)方法即可。PS:只有在需要接收EventBus消息的页面,你才去注册EventBus.getDefault().register(this),并且复写一个onEvent开头的公共的方法,如果你仅仅是单纯的发送消息EventBus.getDefault().post(bean); 是不需要注册的。

B: 如果检查发现确实写了onEvent**(Object arg)方法,但是还是报错,或者是debug包的时候是正常的,Release包却崩溃了,那原因就是混淆的原因

解决办法:在你的混淆文件忽略混淆onEvent的相关即可,不同的版本的混淆方式可能有点差别,根据你的eventBus版本去查对应的混淆方法。(EventBus github地址

举例:EventBus 2.4 的混淆方法:

-keep class de.greenrobot.event.** {*;}
-keepclassmembers class ** {
    public void onEvent*(**);
    void onEvent*(**);
}

EventBus 3.0 的混淆方法:

-keepattributes *Annotation*
-keepclassmembers class * {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
 
# And if you use AsyncExecutor:
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}

至此问题解决。以后遇到debug包正常,Release包却崩溃或者不正常的问题,大多都是混淆的原因。

每日语录:新的一年,新的开始,一切都有可能,所以给自己定个小目标吧,不管能不能实现,首先先把Flag立起来。

我希望新的一年,可以多存钱,可以把日语的N2考过去,学个驾照,当然技术方面也是要提升。加油!!!

单曲循环《三角志》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android EventBus是一个用于Android应用程序内部组件之间通信的开源库。它基于发布/订阅模式,简化了组件之间的通信,使得开发者能够更轻松地实现松耦合的设计。 使用EventBus,你可以定义事件(Event),并将其发布(Post)到EventBus中。其他组件可以订阅(Subscribe)这些事件,并在事件发生时接收通知并执行相应的操作。这种机制使得组件之间的通信更加简单和灵活。 EventBus提供了多种线程模型,可以根据需要选择适合的模式。例如,可以在主线程中订阅事件,以更新UI,或在后台线程中执行耗时操作。 要在Android项目中使用EventBus,你需要首先添加EventBus库的依赖。然后,定义事件类和事件处理方法,并注册和取消注册事件订阅者。最后,在适当的地方发布事件,并在事件处理方法中执行相应的操作。 以下是一个简单的示例: 1. 添加EventBus库的依赖: ```java implementation 'org.greenrobot:eventbus:3.2.0' ``` 2. 定义事件类: ```java public class MessageEvent { private String message; public MessageEvent(String message) { this.message = message; } public String getMessage() { return message; } } ``` 3. 注册和取消注册事件订阅者: ```java @Override public void onStart() { super.onStart(); EventBus.getDefault().register(this); } @Override public void onStop() { super.onStop(); EventBus.getDefault().unregister(this); } ``` 4. 订阅事件和定义事件处理方法: ```java @Subscribe(threadMode = ThreadMode.MAIN)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值