2011-10-13 4 views
3

J'essaie d'utiliser goyave pour m'abonner à EventBus. Essayer de regarder le site doc mais incapable de voir un exemple où il montre comment le faire.abonnement à un bus d'événement

Quelqu'un a déjà essayé ça?

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

Ceci est dans l'un des pots. Maintenant, je dois m'abonner à ce eventbus et vérifier s'il y a de nouveaux eventId postés. Comment puis je faire ça?

Toute aide est appréciée.

Merci!

Répondre

7

Vous auriez besoin d'un objet avec une méthode annotée @Subscribe qui prend un paramètre de type String (depuis que vous affichez un String comme un événement à elle ... A noter qu'un certain type d'événement plus spécifique est sans doute préférable). Vous devez ensuite passer cet objet à la méthode EventBus.register(Object). Exemple:

public class Foo { 
    @Subscribe 
    public void handleEvent(String eventId) { 
    // do something 
    } 
} 

Foo foo = ... 
eventBus.register(foo); 
eventBus.post(eventId); 
0

Voici une démo simple.

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

} 

}

interface animal {

void run(); 

}

classe Cat implémente des animaux {

@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"); 
} 

}

classe CatSubscriber {

@Subscribe 
public void catRun(Animal animal) { 
    animal.run(); 
} 

}

Dog classe

implémente des animaux {

@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"); 
} 

}

classe DogSubscriber {

@Subscribe 
public void dogRun(Animal animal) { 
    animal.run(); 

} 

}

classe Panda implémente des animaux {

@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"); 
} 

}

classe PandaSubscriber {

@Subscribe 
public void pandaRun(Animal animal) { 
    animal.run(); 
} 

}

+0

Vous devriez vraiment ajouter quelques explications pour expliquer pourquoi cela devrait fonctionner - vous pouvez également ajouter du code ainsi que les commentaires dans le code lui-même - sous sa forme actuelle, il ne fournit aucune explication qui puisse aider le reste de la communauté à comprendre ce que vous avez fait pour résoudre/répondre à la question.Ceci est particulièrement important pour une question plus ancienne et les questions qui ont déjà des réponses. – ishmaelMakitla

Questions connexes