java.lang.RuntimeException:h.b.a.g:订户类DashboardActivity及其超类没有带@Subscribe批注的公共方法

时间:2019-07-03 10:18:49

标签: android event-bus

我正在开发此应用程序,并且正在使用greenbot中的EventBus 3.1.1。 我想做的是将事件从片段发布到活动。

奇怪的是,我的代码在调试模式下工作正常,但是当我构建发行版时,尝试注册时会崩溃。

我一直在寻找答案,结果全都出来了,因为订户类别不应该是发布者类别,在我看来,这件事没有问题。

这是我的代码:

在我的片段中,我打电话给

EventBus.getDefault().post(new FireEvent());

在我的活动中:

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;

@Override
protected void onStop() {
    if (EventBus.getDefault().isRegistered(this))
        EventBus.getDefault().unregister(this);
    super.onStop();
}

@Override
protected void onStart() {
    super.onStart();
    if (!EventBus.getDefault().isRegistered(this))
        EventBus.getDefault().register(this);
}

然后我订阅该事件:

@Subscribe(threadMode = ThreadMode.MAIN)
public void fireEvent(FireEvent event) {

}

2 个答案:

答案 0 :(得分:0)

根据文档,您应该为发布版本添加以下保护规则:http://greenrobot.org/eventbus/documentation/proguard

答案 1 :(得分:0)

基于@tidder的答案,我一直尝试添加和删除规则,并达到了下面的脚本,效果很好。

-keepattributes *Annotation*
-keepclassmembers class * {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }

# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}
# EventBus 3.0
-keep class de.greenrobot.event.** { *; }
-keep class * {
    @de.greenrobot.event.* <methods>;
}