2014-12-16 7 views
6

In meiner Tätigkeit I EventBusGreenrobot EventBus nicht in Hintergrunddienst empfangen Nachricht von Aktivität gebucht

@Override 
protected void onResume() { 
     super.onResume(); 
     EventBus.getDefault().post(new String("We are the champions")); 
} 

In meinem Hintergrunddienst senden registrieren ich EventBus und versuchen Nachricht von Aktivität zu erhalten wie diese

@Override 
public void onCreate() { 
    super.onCreate(); 
    EventBus.getDefault().register(this); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    EventBus.getDefault().unregister(this); 
} 

public void onEventBackgroundThread(String s){ 
     Log.d(TAG, "onEventBackgroundThread: " + s); 
    } 
gesendet

Aber nichts passiert. Ich habe versucht, im Internet zu suchen, konnte aber keine Antwort bekommen.

Fehler ich

No subscribers registered for event class java.lang.String 
No subscribers registered for event class de.greenrobot.event.NoSubscriberEvent 

1.Edit

Ich habe bereits EventBus Kommunikation von Service Aktivität. Aber jetzt will ich es auch in umgekehrter Richtung arbeiten lassen (Von Aktivität zu Service). Ist es möglich, dass es Konflikte gibt?

+0

Haben Sie eine Lösung gefunden? – iRuth

+0

Es funktioniert tatsächlich in beide Richtungen, wenn ich den Dienst mit StartService (Intent) starte; in einer der App Aktivitäten. Aber wenn ich versuche, einen neuen Thread für den Hintergrunddienst zu verwenden, kann er keine Kommunikation herstellen. –

+0

Ja, ich habe es schließlich mit 'startService' zum Laufen gebracht. Vielen Dank für Ihre Antwort. – iRuth

Antwort

0

Ich habe greenrobot vorher noch nicht benutzt, aber ich denke, es sollte dem eventbus von guava ähneln. Ich denke, dass Sie eine Ereignisklasse erstellen sollten, anstatt String zu verwenden. Sie können einen Blick auf https://github.com/greenrobot/EventBus werfen. z.B.

public class MessageEvent { 
String s; 
} 
+0

habe ich deine lösung versucht, bekomme aber trotzdem einen ähnlichen fehler –

2

Zuerst müssen Sie eine benutzerdefinierte Nachricht Ereignisklasse definieren:

public class MyMessageEvent { 
    String s; 
} 

Dann sollten Sie eine Teilnehmer-Methode in Ihren Dienst hinzuzufügen. Schlüssel ist Ihr MyMessageEvent als Parameter enthalten:

public void onEventBackgroundThread(MyMeasageEvent myEvent){ 
     Log.d(TAG, "onEventBackgroundThread: " + myEvent.s); 
    } 

Plus Ihr Service Register mit EventBus sicherstellen.

schließlich ein MyMessageEvent in Ihrer Aktivität erstellen und auf dem EventBus schreiben:

MyMessageEvent myEvent = new MyMessageEvent() ; 
myEvent.s = "hello" ; 

EventBus.getDefault().post(myEvent) ; 

Wenn es immer noch nicht erhalten, versuchen Sie die Post auf eine separate Zeile aus dem Standard-get zu splitten. Manchmal funktioniert die Verkettung nicht.

+0

du hast mich gerettet, es ist einfach nur die verkettung ... vielen dank – Ale

Verwandte Themen