问题标签 [greenrobot-eventbus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4814 浏览

java - Greenbot Eventbus 3.0:onEvent、onEventMainThread、onEventBackgroundThread和onEventAsync有什么区别?

我对Greenrobot的 EventBus 3.0中的 、 和onEventonEventMainThread用法有点困惑onEventBackgroundThreadonEventAsync

从我在文档中看到的:

  • onEventThreadMode.POSTING(默认)一起使用
  • onEventMainThreadThreadMode.MAIN
  • onEventBackgroundThreadThreadMode.BackgroundThread
  • onEventAsyncThreadMode.ASYNC

但是在从后台线程发布事件的情况下:

具有与以下完全相同的行为:

和:

抛出CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.是因为线程与发布线程(我的测试中的背景线程)相同。

从 3.0 版开始,@Subscribe注释是必需的,所以我不明白在这种情况下我应该使用onEvent. 是否保留它们以促进从 EventBus 2 升级到 3?

0 投票
1 回答
2079 浏览

android - EventBus OnEvent() 没有被调用

嗨,我正在使用事件总线将数据从一个片段传递到另一个片段

从片段1我正在做如下

在 Fragment-2 中,我在OnActivitycreated

然后我将OnEvent()方法放在片段2中

下面是我的BoreshaftVales

但是这个OnEvent()方法根本没有被调用。我做对了吗?

0 投票
1 回答
1736 浏览

android - 尝试在两个片段之间进行通信时,EventBus 不起作用

我在 viewpager 中设置了三个片段,就像滑动选项卡布局一样。我需要将一个字符串值从一个片段传递到另一个片段。

首先,我尝试设置一个界面,如此处的答案建议如何在 对我不起作用的片段之间传递数据。这个想法是 Fragment A 告诉 Main Activity,然后 Main Activity 告诉 Fragment B。

所以我寻找不同的答案

http://android-er.blogspot.com/2012/06/communication-between-fragments-in.html

看起来很有希望但没有工作,因为我无法在我的代码中使用相同的功能,因为我使用谷歌的滑动标签布局而不是旧的操作栏设置了我的视图页面。

现在我偶然发现了 EventBus。我真的认为这是我的答案。正如以下两个答案所建议的那样,我将它添加到我的代码中。没有崩溃,但也没有任何效果。

我在 logcat 中找到了这个:

D/Event:没有订阅者注册事件类 tk.abestudying.atob.TextChangedEvent D/Event:没有订阅者注册事件类 de.greenrobot.event.NoSubscriberEvent

ViewPager 中 Fragment 之间的通信

SlidingTabLayout 选项卡之间的通信

这是我的代码:链接已删除

请帮忙。我已经尝试了几个小时的解决方案,但我很难过。谢谢你。

编辑:我通过谨慎和重写代码让它工作。

0 投票
1 回答
96 浏览

android - 使用库 CWAC CAM2 拍摄时方向更改崩溃

我使用 CommonsWare 库在我的 nexus 5 Android 6(锤击/锤击)上崩溃了cwac:cam2

当我改变录制/照片拍摄活动的方向时。该错误在我的设备上是系统性的。

堆栈跟踪 :

非常感谢您的支持,修复非常迅速地实施。

0 投票
1 回答
419 浏览

android - GreenRobot EventBus 收到错误事件

我正在尝试在我的项目中使用 EventBus,但我遇到了问题。我有一个带有通用 EVENT 参数的片段的超类:

我有一个超类 BaseEvent。和2个事件类:

我使用通用参数 EventOne 创建 Fragment 并调用 Api:

现在我不使用 EventTwo 并且一切正常。

但是如果我添加我的 MyFragment 代码:

并要求 Api 服务发布 EventTwo 结果,我有错误。我的方法onEventTwo();工作正常,但超类中的方法onApiResponse();也接收 EventTwo,但它只能接收 EventOne!所以我有 ClassCastException

我还注意到,如果我onApiResponse()从超类中删除方法并将其写入 MyFragment 一切都会好的,但我需要在超类中使用此方法。

我认为该问题出在通用参数中,但我无法解决。我也对异步请求使用改造。请帮我)

0 投票
3 回答
2284 浏览

android - EventBus 不会在新活动上注册事件

我已经实现了一个 otto 总线示例。它工作正常,但仅在我第二次访问该活动时。

例如,当我加载应用程序并点击秘密消息按钮时,我被带到了活动中,但 toast 没有显示。然后我点击后退按钮返回到 MainActivity 并再次点击显示秘密消息按钮,当我被带到秘密消息活动时,会显示 toast。我意识到它第二次起作用了,因为我没有取消注册事件而造成了泄漏。

我在逻辑上有什么遗漏吗?

主要活动:

秘密消息活动:

MakeMySecretMessage 事件:

事件总线:

0 投票
1 回答
1141 浏览

android - 事件总线索引

我应该在何处/何时添加 Green Robot Event Bus 库的索引:

如此处所述?我已经把这个 onCreate() 方法放在我的启动器活动中,但有时我会得到:

我哪里错了?非常感谢。

0 投票
15 回答
39180 浏览

android - EventBus - 订阅者类及其超类没有带有 @subscribe 注释的公共方法

我正在创建一个使用 EventBus 将异步广播发布到其他类的 Android 应用程序,但在执行过程中我遇到了错误。

MainActivity.java

MapClass.java

LogCat 显示以下内容:

为什么会这样?难道我做错了什么?

0 投票
1 回答
686 浏览

android - Greenrobot 的 Eventbus:调用异步任务作业的两个片段让 Eventbus 感到困惑

我目前正在研究Fragments是在 with 下创建ActivitiesFragmentPagerAdapter。我使用 GreenRobot 的 EventBus 3.0 返回一些我从服务类创建的 AsyncTask。然而,由于这两个片段是一个接一个地创建的,事件总线的帖子粘性的返回使订阅的片段混淆了。我已经浏览了stackoverflow,做了其他人所做的(例如将eventBus寄存器放到onStart和OnStop等),但我仍然看不到类似的问题。希望您能够帮助我。谢谢!

这是我的两个片段:(我省略了一些不必要的代码)

1.状态片段

2. 状态服务——状态片段的服务类

3.图表片段

4. 海图服务

5.结果类

6.状态类

因此,每次创建片段时,它们都会调用其服务类,该服务类依次发布,List<Status>并且List<Results>几乎一个接一个地发布。因此,它在说

这是完整的堆栈跟踪:

你们知道我的代码有什么问题吗?谢谢。

0 投票
1 回答
10351 浏览

android - RecyclerView RecyclerViewDataObserver 未注册

我正在使用RecyclerViewgreenrobot eventbusSyncAdapter完成同步后, 我将一条消息发布到消息总线中:SyncAdapter

在我的目标类中,我执行以下操作:

在我的init()我为recyclerview创建适配器并设置它:

接收事件的片段位于选项卡视图的内部。所以有多个选项卡,有时当我不在正确的目标选项卡中时,有时当然会将SyncAdapter帖子发布到消息总线中,但由于它已注册,它会尝试调用并创建适配器并将其设置为. 如果发生这种情况,我会收到以下错误:EventMessagesRefreshedinit()RecyclerView

所以我需要init()我的适配器,并且RecyclerView只有在RecyclerViewDataObserver注册时。

我怎样才能做到这一点?