2011-10-13 129 views
3

我正在尝试使用番石榴订阅EventBus。尝试查看网站文档,但无法看到展示如何执行此操作的任何示例。订阅事件总线

任何人之前试过?

private final EventBus eventBus = new EventBus(); 
eventBus.post(eventId); // where eventId is a string. 

这是在一个罐子里。现在我需要订阅这个事件总线并检查是否有任何新的eventId已发布。我怎样才能做到这一点?

任何帮助表示赞赏。

谢谢!

回答

7

您需要一些带有方法注解的对象@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); 
0

这是一个简单的演示。

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(); 
} 

}

+0

你真的应该加入一些解释,为什么这应该工作 - 您也可以在代码本身0123中添加代码以及注释- 以目前的形式,它没有提供任何解释,可以帮助社区的其他人了解您做了什么来解决/回答问题。这对于较老的问题和已经有答案的问题尤其重要。 – ishmaelMakitla