问题标签 [greenrobot-eventbus-3.0]

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 投票
1 回答
481 浏览

greenrobot-eventbus - 后台线程与异步线程池

我从 GreenRobot EventBus文档中看到,线程模式BACKGROUND使用单个后台线程,线程模式ASYNC使用线程池。

任何人碰巧知道线程模式使用的后台线程是否与BACKGROUND线程模式使用的线程分开和不同ASYNC

我问是因为我想将BACKGROUND线程模式用于快速事件(如本地文件访问),我想将线程模式用于慢(er)事件(如网络调用)......如果事件从未发生,ASYNC我自然会喜欢它BACKGROUND等待ASYNC事件完成。

0 投票
3 回答
879 浏览

android - 查看具有多个片段的寻呼机 - Eventbus 多次注册

我使用ViewPager了 3 个嵌套的Fragment.I 用于EventBus事件处理。但在我的情况下,订阅方法被多次调用。因为EventBus被多次注册。我已经使用这些方法进行registering注销EventBus

viewpagernavigation drawer fragment. 我onresume()像这样更新了我,但仍然发生同样的事情

}

这些事件被多次接收,这就是为什么嵌套 api 被多次调用

0 投票
1 回答
391 浏览

android - 如何使用 greenrobot eventbus 进行网络通信?

所以,我想使用 GreenRobots 网站上提到的以下功能,

EventBus 可以为您处理线程:事件可以在与发布线程不同的线程中发布。一个常见的用例是处理 UI 更改。在 Android 中,UI 更改必须在 UI(主)线程中完成。另一方面,网络或任何耗时的任务都不能在主线程上运行。

我想做的是,在我的 android 应用程序中,我想创建一个事件来处理我的所有网络任务(从服务器发送和接收数据)。

我该怎么做?

我是否应该在事件 POJO 中进行网络调用,然后使用 OnEvent 来执行网络调用后任务。(我认为这不正确吗?)

编辑:使用事件总线进行线程处理可能不是最好的选择,因为您的所有 OnEvent 调用将一个接一个地同步运行,这可能会导致总线阻塞,而且它也不是为此而生的。但是下面的答案是如果有要求的话可以做到的方式。

0 投票
3 回答
14383 浏览

android - 片段中的事件总线

我创建了一个带有 2 个片段(FragmentOne.javaFragmentTwo.java )的活动( DemoActivity.java)。

EventBus像这样在活动中注册了EventBus.getDefault().register(this);

并在 Activity 中创建了一个 Suscriber 方法:

然后我在按钮单击时从 FragmentTwo.java 发布一个事件EventBus.getDefault().post("");

这种情况对我来说很好。但是当我在 FragmentOne.java 中创建相同的订阅者方法时,它不起作用。为什么?

0 投票
2 回答
1478 浏览

android - EventBus 为单个帖子调用两个不同的处理程序

我在使用 EventBus 3.0.0 时遇到问题,我在其中发布了一个这样的事件:

我在同一个片段中有两个订阅者,每个订阅者都有不同的签名,但他们都从一个帖子中被调用:

第二个订阅者定义为:

这两个回调都在一个片段中,该片段在帖子完成时处于活动状态,并且我已验证帖子仅被调用一次。当发布单个 SessionSpec 事件时,onSessionSpec 和 onOverlayType 回调都由 EventBus 调度,事件类型为 List>,因此 onOverlayType 回调在其回调参数中接收到错误的类型。OverlayType 类是一个简单的 POJO 类,它有 2 个成员,一个 int "sid" 和一个 String "name"。SessionSpec 类更复杂;它确实有一个成员字符串“名称”,但除此之外,这两个类之间没有其他共同点。我已经验证在 SessionSpec 类中没有与“OverlayType”非常相似的东西。

接口定义是这样的:

}

getSession 事件发布/回调没有问题。

我整天都在试图弄清楚出了什么问题,所以我现在一无所知。有人知道我的代码可能有什么问题吗?

谢谢,-安德烈斯

编辑:EventBus 如何知道为特定响应调用哪个处理程序?我读过的一些帖子说 EventBus 不使用处理程序签名,但它怎么知道如何将响应映射到正确的订阅处理程序例程?有没有办法为给定事件显式定义处理程序回调?

0 投票
1 回答
1175 浏览

java - 订阅同一类中的不同事件总线

我将GreenRobot Event Bus 3.0用作事件总线,我有 2 个发布者:

我有 2 个订阅者:

问题是当拨打电话时:

MyPublisher.sendEvent(new OtherLoggingEvent(varA, varB, varC));

两个订阅者都被调用,我不知道为什么。我认为这可能与它OtherLoggingEvent是 的子类有关LoggingEvent,但我不确定。然后我的问题变成了我如何与发布者和订阅者保持一对一的关系。我想打电话:

并打电话给订户public void onEvent(OtherLoggingEvent event),当我打电话时:

订户:

会叫?这会按原样工作,但必须确保这些类是唯一的,而不是彼此的子类?我必须创建一个新EventBus对象吗?

0 投票
2 回答
114 浏览

android - 如何在活动类上识别事件总线的调用者

我在活动上使用EventBus并覆盖一个事件 ABC。现在我从多个类(EventBus.getDefault().post(new ABC())等)调用该事件,并且我的活动类得到回调。所以我的问题是:有什么方法可以识别在我的活动课上调用该事件的调用者。

0 投票
0 回答
311 浏览

android - GreenRobot 的 EventBus 总是返回 NullPointerException

我不确定,这个库是怎么回事,但结果总是不一致(至少对我来说)。

我在ActivityB中有ActivityAActivityBFragmentB1。我必须将一个字符串 ID 从 ActivityA 传递给 ActivityB,即 FragmentB1。由于我将在 ActivityB 中有更多片段也需要此 ID,所以我想为什么不使用 EventBus。因此,ActivityA 成为发布者,ActivityB、FragmentB1 成为订阅者。

为事件定义 POJO

ActivityA 的代码如下。当我选择 Spinner Item 时,将运行以下代码。

EventBus.getDefault().post(new EventUid(Uid));

ActivityB,FragmentB1的代码如下。首先我在 onStart() 中注册事件。

然后我在 onStop() 中取消注册事件。

在订阅Event之前,我在ActivityB和FragmentB1中定义了一个String。

最后,我在 ActivityB 和 FragmentB1 中订阅了该事件,如下所示。

我不确定我可能哪里出错了,但是 ActivityB 和 FragmentB1 总是返回 NullPointerException。有人可以指出我正确的方式吗?

谢谢

编辑:添加 LogCat。PS:本题中的Activity、Fragment Names(为便于理解而命名)将与LogCat不同。

0 投票
1 回答
371 浏览

android - 带有 EventBus 和 Started Service 的 Android MVP

语境

我编写了一个Android 应用程序来播放单个媒体文件,其歌词显示在活动中。活动屏幕还有一个播放-暂停切换按钮和一个使用拖动来前进/后退的搜索栏。Activity 在其 onCreate() 方法中启动 Started Service。

我正在尝试将应用程序分层以确认 MVP 设计模式。我正在寻找适合这种情况的示例代码作为指导。非常感谢您的帮助。

我很想学的东西

  1. 如果像我这样 Activity 和 Started Service 使用 EventBus 进行双向通信,那么 EventBus 监听器的代码在哪里?Presenter 在这方面没有任何作用吗?
  2. EventBus 相关代码的代码是如何测试的——单元测试和集成测试?
  3. Activity 中有什么代码?服务中有什么?Presenter 与 Activity 和 Service 的合约是什么样的?最后,这个presenter的实现是怎样的?
  4. 在 MVP 的情况下,如何管理 MenuOptions 点击事件的代码?

如果详细的解释对您造成伤害,我们非常感谢您对 Github/Bitbucket 中现有代码存储库的任何引用。提前致谢。

0 投票
1 回答
1776 浏览

android - greenrobot 事件总线的 ProGuard 配置

我在我的应用程序中使用了 eventbus,它在调试模式下工作正常,但在发布 APK 上不工作。

以下代码用于 ProGuard 配置:

我所有的订阅注释方法也是公开的

日志输出:

无法调度事件:com.dhaval.example.model.entity.response.DashboardUnreadStoryResponse 类订阅类 com.dhaval.example.view.activity.MainActivity java.lang.NullPointerException:尝试调用虚拟方法'java.lang。在 com.dhaval.example.view 的 com.dhaval.example.view.activity.MainActivity.b(SourceFile:150) 上的空对象引用上的字符串 com.dhaval.example.model.entity.Dashboard.ba()'。 java.lang.reflect.Method 中的 activity.MainActivity.onEventBusEvent(SourceFile:560)。在 org.greenrobot.eventbus.ca(SourceFile:420) 在 org.greenrobot.eventbus.ca(SourceFile:397) 在 org.greenrobot.eventbus. 调用 (Native Method) 在 org.greenrobot.eventbus.ca(SourceFile:485) .ca(SourceFile:370) at org.greenrobot.eventbus.cd(SourceFile:251) at com.dhaval.example.view.ar$1.a(SourceFile:140) at com.dhaval.example.view.ar$1。一个(源文件:130) 在 com.dhaval.example.f.ap$2.a(SourceFile:90) 在 com.dhaval.example.f.ap$2.a(SourceFile:85) 在 com.dhaval.example.network.a$1。 a_(SourceFile:101) 在 rx.caa_(SourceFile:134) 在 rx.internal.operators.n$aa(SourceFile:224) 在 rx.abb$b.run(SourceFile:107) 在 android.os.Handler。处理回调(处理程序.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6290) 在 java.在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 的 lang.reflect.Method.invoke(Native Method) ) 07-14 11:39:43.640 16402-16402/com.dhaval.example D/EventBus:没有订阅者注册事件类 org.greenrobot.eventbus.j 07-14 11:39:43.657 16402-16402/com.dhaval.example E/com.dhaval.example.view.ar$1:getResponse 中的错误:尝试调用空对象引用上的虚拟方法“java.lang.String com.dhaval.example.model.entity.Dashboard.ba()”