Android关于EventBus报错解决方法its super classes have no public methods with the @Subscribe

关联EventBusRxBusandroidStudioAndroid
异常
Subscriber class xxx and its super classes have no public methods with the @Subscribe annotation
分析

从源码上看,是因为没有注解,反射得到为空。在这里插入图片描述

我的代码里是这样写的:一个注册,一个反注册,发现报错,然后一些blog博主说是啥?R8压缩问题
在这里插入图片描述
之后我开始进行修改,有以下两种方案:

方案一

关闭R8压缩

minifyEnabled false

但是这样会使得你的应用增大不少,比如你使用了某个第三方库时,应用中只使用了其中很小一部分,但打包时所有库代码都会保留在应用中。

方案二

添加相应的压缩/混淆规则,比如EventBus

-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);
}

两种方案我都进行修改了,发现还是不行,之后感觉出来可能是没有@Subscribe 注解的原因,所以我进行了如下修改,添加了注解,测试过后发现还是不行,又在里面加了事件,才好使

在这里插入图片描述

如下,改到这里,程序才好使,没有报那个错误
在这里插入图片描述

总结

RxBus 要想使用,每个注册的地方都得搭配一个 监听的接受者,还必须要带上接收的事件才行。我在别的地方有监听的接收者还不行,当然 ,这个接收者的事件 可以是别的事件,但是必须要有接收者。真坑啊。。。必须要搭配使用,男女搭配,干活不累。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值