【问题标题】:java.lang.RuntimeException: h.b.a.g: Subscriber class DashboardActivity and its super classes have no public methods with the @Subscribe annotationjava.lang.RuntimeException: h.b.a.g: 订阅者类 DashboardActivity 及其超类没有带有 @Subscribe 注释的公共方法
【发布时间】:2019-07-03 10:18:49
【问题描述】:

我正在开发这个应用程序,我正在使用来自 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) {

}

【问题讨论】:

    标签: android event-bus


    【解决方案1】:

    根据@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>;
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢你的回答,我试过了,还是不行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 2021-02-23
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      相关资源
      最近更新 更多