- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 EventBus 3.0.0 时遇到问题,我在其中发布了一个这样的事件:
Call<List<SessionSpec>> call = httpService.getSessionSpecs();
call.enqueue(new Callback<List<SessionSpec>>() {
@Override
public void onResponse(Call<List<SessionSpec>> call, Response<List<SessionSpec>> response) {
if (response.isSuccessful()) {
List<SessionSpec> specs = response.body();
EventBus.getDefault().post((List<SessionSpec>)specs);
}
else Log.e(TAG, "sendSessionSpecs(): request NOT successful");
}
@Override
public void onFailure(Call<List<SessionSpec>> call, Throwable t) {
Log.e(TAG, "sendSessionsSpecs(): failed");
}
});
我在同一个 fragment 中有两个订阅者,每个订阅者都有不同的签名,但他们都从一个帖子中被调用:
@Subscribe
public void onSessionSpec(List<SessionSpec> specs) {
Log.d(TAG, "onSessionSpec(): entered");
Log.d(TAG, " : number of session specs: " + specs.size());
}
第二个订阅者定义为:
@Subscribe
public void onOverlayType(List<OverlayType> types) {
Log.d(TAG, "onOverlayType(): entered");
Log.d(TAG, " : number of overlay types: " + types.size());
}
这两个回调都在一个 fragment 中,该 fragment 在帖子完成时处于 Activity 状态,并且我已验证该帖子仅被调用一次。当发布单个 SessionSpec 事件时,onSessionSpec 和 onOverlayType 回调均由事件类型为 List> 的 EventBus 调度,因此 onOverlayType 回调在其回调参数中接收到错误的类型。 OverlayType 类是一个简单的 POJO 类,有 2 个成员,一个 int “sid” 和一个 String “name”。 SessionSpec 类更复杂;它确实有一个成员字符串“名称”,但除此之外,这两个类之间没有其他共同之处。我已验证在 SessionSpec 类中没有与“OverlayType”非常相似的内容。
接口(interface)定义是这样的:
public interface VcapHttpInterface {
@GET("overlay/types")
Call<List<OverlayType>> getOverlayTypes();
@GET("session/list")
Call<List<SessionSpec>> getSessionSpecs();
@GET("session/{id}")
Call<Session> getSession(@Path("id") int sid);
getSession事件post/callback没有问题。
我花了一整天的时间试图找出问题所在,所以我现在一无所知。有人知道我的代码可能有什么问题吗?
谢谢,-安德烈斯
编辑:EventBus 如何知道为特定响应调用哪个处理程序?我读过的一些帖子说 EventBus 不使用处理程序签名,但它怎么知道如何将响应映射到正确的订阅处理程序例程?有没有办法明确定义给定事件的处理程序回调?
最佳答案
EventBus
检查您发布的对象的类,并调用在其参数中需要该类的方法。在您的情况下,您发布的对象是 List
。在您的两个监听器中,您都希望有一个 List
类型的对象。无论您在 OverlayType
或 SessionSpec
中放入什么泛型,eventbus 都会调用两者。为了使其工作,您必须将模型定义为事件。
public class OverlayTypeEvent {
public List<OverlayType> types;
public OverlayTypeEvent(List<OverlayType> types) {
this.types = types;
}
}
和
public class SessionSpecEvent {
public List<SessionSpec> types;
public SessionSpecEvent(List<SessionSpec> types) {
this.types = types;
}
}
然后分别听取他们的意见。然后发布具有特定类型的事件。
@Subscribe
public void onSessionSpec(OverlayTypeEvent event) {
List<OverlayType> overlayTypes = event.overlayType;
}
关于android - EventBus 为单个帖子调用两个不同的处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42742351/
我经常使用 greenrobot 的 EventBus https://github.com/greenrobot/EventBus 但我刚刚意识到 Guava 有自己的 EventBus com.g
对于 EventBus,我将代码合并到我的 java Spring 应用程序中并完全控制它,但结果没有改变。 当我在 spring sts (javaw) 中运行 EventBus 时,没有问题,但是
我想做的是将一个事件从另一个 AWS 账户发送到我的包含事件总线的账户。 为此,我正在尝试将角色/策略附加到 EventBus,但我做不到。我尝试使用 grantPutEvents 但也没有运气。这个
我想做的是将一个事件从另一个 AWS 账户发送到我的包含事件总线的账户。 为此,我正在尝试将角色/策略附加到 EventBus,但我做不到。我尝试使用 grantPutEvents 但也没有运气。这个
我是这个 eventbus 库的粉丝,并且在其他项目中很好地使用了它,没有遇到任何问题。但是现在,我在 Activity 中注册事件总线时遇到了一些奇怪的问题,并且在这里卡住了这部分... java.
我目前正在使用 Fragments 在 Activities 下创建的 FragmentPagerAdapter。我使用 GreenRobot 的 EventBus 3.0 返回我从服务类创建的一些
前沿 vue组件非常常见的有父子组件通信,兄弟组件通信。而父子组件通信就很简单,父组件会通过 props 向下传数据给子组件,当子组件有事情要告诉父组件时会通过 $emit 事件告诉父组件。如果1个页
早晨, 我正在使用 SimpleEvent总线将数据从我的集中式数据恢复器发送到小部件。这真的很好用,我从服务器获得一组新数据,RPC 调用的成功方法将它放在 Eventbus 上,每个小部件查看数据
我在Android应用程序中使用EventBus。在我的Eventbus.getDefault().register(this)中编写一个Application.onCreate()是一个好主意吗?我
我正在尝试使用 Vertx 上传文件,该请求是包含 PDF 的 POST 请求,我的处理程序如下所示(我从 github 中的示例中获取了代码): ... Set fileUploadSet = ro
所以我在 Vue.js 中使用 EventBus 将数据从一种方法发送到另一种方法。我有两种方法,比方说 one() 和 two()。我正在使用 EventBus,如下所示: one() { Ev
我有一个使用这个库的情况 greenrobot/EventBus保存数据并将它们传递给不同的 Activity 。在这种情况下,我使用 EventBus 来传递“订单”和 “cartItems” OB
我使用 greenrobot 作为 eventbus 来发布一些粘性事件。一切正常,当我打开应用程序时,ex。显示的内容表明粘帖工作正常。 但是当我关闭应用程序并打开它第二次、第三次……时,没有前任。
我在使用 EventBus 3.0.0 时遇到问题,我在其中发布了一个这样的事件: Call> call = httpService.getSessionSpecs(); call.enqueue(n
我在 android 中学习事件总线(http://greenrobot.org),我有以下代码 public class MainActivity extends AppCompatActivity
我正在尝试弄清楚如何在我的 AppWidgetProvider 中使用 Greenbot Eventbus 库。我尝试了以下方法,但没有用: public class SimpleWidgetProv
在我的安卓应用中我使用 org.greenrobot.eventbus.EventBus; 1.我创建事件: public class NotLoginEvent { } 在我的 fragment 中
我正在尝试从我的 WS 获取位置并更新我的 GoogleMap fragment 中的标记,所以我正在做的是: 我的 HomeActivity 包含 2 个 fragment (2 个 GoogleM
我正在尝试在我所有对话的基类中实现一些通用逻辑和对某些事件的 react 。 并在 EventBus 中注册和注销,并在基类中捕获一些事件。 因此,当我尝试实例化派生类的实例时 - EventBus
我在库中有一个带注释的 Activity,它是同一库中 EventBus 事件的订阅者。它看起来像这样,大大简化了: @EActivity(resName = "activity_foo") publ
我是一名优秀的程序员,十分优秀!