我正在尝试使用番石榴订阅EventBus。尝试查看网站文档,但无法看到展示如何执行此操作的任何示例。订阅事件总线
任何人之前试过?
private final EventBus eventBus = new EventBus();
eventBus.post(eventId); // where eventId is a string.
这是在一个罐子里。现在我需要订阅这个事件总线并检查是否有任何新的eventId已发布。我怎样才能做到这一点?
任何帮助表示赞赏。
谢谢!
我正在尝试使用番石榴订阅EventBus。尝试查看网站文档,但无法看到展示如何执行此操作的任何示例。订阅事件总线
任何人之前试过?
private final EventBus eventBus = new EventBus();
eventBus.post(eventId); // where eventId is a string.
这是在一个罐子里。现在我需要订阅这个事件总线并检查是否有任何新的eventId已发布。我怎样才能做到这一点?
任何帮助表示赞赏。
谢谢!
您需要一些带有方法注解的对象@Subscribe
,该对象需要String
类型的参数(因为您将String
作为事件发布给它...请注意,某种更具体的事件类型可能更可取)。然后您需要将该对象传递给EventBus.register(Object)方法。例如:
public class Foo {
@Subscribe
public void handleEvent(String eventId) {
// do something
}
}
Foo foo = ...
eventBus.register(foo);
eventBus.post(eventId);
这是一个简单的演示。
public class EventBusDemo{
public static void main(String[] args) {
handleTransaction();
}
public static void handleTransaction() {
CatSubscriber catSubscriber = new CatSubscriber();
PandaSubscriber pandaSubscriber = new PandaSubscriber();
DogSubscriber dogSubscriber = new DogSubscriber();
EventBus eventBus = new EventBus();
Animal cat = new Cat();
Animal dog = new Dog();
Animal panda = new Panda();
eventBus.register(pandaSubscriber);
eventBus.register(catSubscriber);
eventBus.register(dogSubscriber);
eventBus.post(cat);
eventBus.post(dog);
eventBus.post(panda);
}
}
接口动物{
}
类Cat实现动物{
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
System.out.println(Cat.class.getSimpleName() + " run");
}
}
类CatSubscriber {
@Subscribe
public void catRun(Animal animal) {
animal.run();
}
}
类狗实现动物{
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
System.out.println(Dog.class.getSimpleName() + " run");
}
}
类DogSubscriber {
@Subscribe
public void dogRun(Animal animal) {
animal.run();
}
}
类熊猫实现动物{
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
System.out.println(Panda.class.getSimpleName() + " run");
}
}
类PandaSubscriber {
@Subscribe
public void pandaRun(Animal animal) {
animal.run();
}
}
你真的应该加入一些解释,为什么这应该工作 - 您也可以在代码本身0123中添加代码以及注释- 以目前的形式,它没有提供任何解释,可以帮助社区的其他人了解您做了什么来解决/回答问题。这对于较老的问题和已经有答案的问题尤其重要。 – ishmaelMakitla