使用EventBus 3.0 报 Subscriber class com.example.test.MainActivity and its super classes have no public methods with the @Subscribe annotation

简介: 使用EventBus 3.0 报 Subscriber class com.example.test.MainActivity and its super classes have no public methods with the @Subscribe annotation

使用EventBus 3.0 报 Subscriber class com.example.test.MainActivity and its super classes have no public methods with the @Subscribe annotation


代码如下:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //订阅事件
        EventBus.getDefault().register(this);
        
        EventBus.getDefault().post(new MessageEvent("onCreate",0));
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //取消订阅
        EventBus.getDefault().unregister(this);
    }
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void whenOnClick(){
        Toast.makeText(this, "收到事件", Toast.LENGTH_SHORT).show();
    }
}

原因:被注解 @Subscribe 标注的方法 参数没有对应的Event类型

解决方法:

方法参数加上对应的Event类型 参数的类型和发送的类型对应,当发送了多个类型时,注解方法只接收并处理与其发送的Event类型一致的事件

@Subscribe(threadMode = ThreadMode.MAIN)
    public void whenOnClick(MessageEvent messageEvent){
        Toast.makeText(this, "收到事件", Toast.LENGTH_SHORT).show();
    }

粘性事件

发送事件后再订阅事件也可以收到,发送时使用postSticky 方法

EventBus.getDefault().postSticky(new MessageEvent("onCreate",0));

需要指定 sticky = true  默认为false

@Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
    public void whenOnClickSticky(MessageEvent messageEvent){
        Toast.makeText(this, "收到了事件"+messageEvent.getMessage(), Toast.LENGTH_SHORT).show();
    }

事件优先级

高优先级的事件优先于低优先级的事件,不管高低优先级,都会收到事件并处理,指定事件优先级使用  @Subscribe 的priority指定即可

@Subscribe(threadMode = ThreadMode.MAIN,priority = 2)

 

目录
相关文章
|
API Android开发 容器
33. 【Android教程】悬浮窗:PopupWindow
33. 【Android教程】悬浮窗:PopupWindow
2290 2
|
8月前
|
存储 Java C语言
Java List 复制:浅拷贝与深拷贝方法及区别
我是小假 期待与你的下一次相遇 ~
822 1
|
8月前
|
缓存 JavaScript 开发者
鸿蒙5开发宝藏案例分享---长列表性能优化解析
鸿蒙长列表性能优化全揭秘!通过五大实战技巧(LazyForEach懒加载、cachedCount缓存、Prefetcher动态预加载、@Reusable组件复用及布局优化),有效解决卡顿、白块和高内存问题。万条数据测试显示,首屏加载提速77%,滑动零丢帧,内存占用降低86%。针对不同数据量场景提供避坑指南,助你开发流畅的HarmonyOS应用!
太便利了 !通义灵码方便生成html页面
太便利了 !通义灵码方便生成html页面
407 0
|
XML Android开发 数据格式
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
本文通过案例分析了在Android中当两个Activity都设置了`android.intent.category.LAUNCHER`类别时,会导致它们同时在应用启动器的"所有应用"页面显示为不同的启动入口。
479 2
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
|
Java 容器
【Java异常】java.lang.UnsupportedOperationException解决方案
【Java异常】java.lang.UnsupportedOperationException解决方案
704 1
|
Android开发
解决E/RecyclerView: No layout manager attached; skipping layout
解决E/RecyclerView: No layout manager attached; skipping layout
579 1
|
Android开发
Android android:exported="true" 属性
Android android:exported="true" 属性
2162 0
|
JavaScript 前端开发 Android开发
Android AgentWeb WebView 与js交互总结
Android AgentWeb WebView 与js交互总结
775 0
|
存储 Java API
JavaMail实现收发邮件
JavaMail 是一套用于发送和接收电子邮件的API,由Sun定义,但不包含在JDK中,属于JavaEE的一部分。它支持SMTP、POP3和IMAP等邮件协议,以及SSL加密传输。JavaMail需要JAF来处理非纯文本邮件内容,如MIME附件。关键对象包括Properties(存储服务器信息)、Session(配置信息集合和初始化环境)、Transport(发送邮件)和Store(接收邮件)。Message用于构建邮件内容,Address处理邮件地址,Authenticator处理认证。JavaMail API允许开发者自定义协议支持,如NNTP和S/MIME。
441 0