Ich habe ein Problem mit EventBus
von Greenrobot.Wie Sie eine Nachricht von einem Hintergrunddienst an ein UI-Fragment senden?
Ich habe versucht, ein Ereignis von einem Hintergrunddienstformular mein Sync-Adapter zu buchen und es in einem Fragment abzufangen, um die Benutzeroberfläche zu aktualisieren.
Das Problem ist, dass, wenn ich versuche, das Ereignis von Sync-Adapter zu schreiben ich habe folgend im Debug-Protokoll:
No subscribers registered for event class olexiimuraviov.ua.simplerssreader.event.UpdateUIEvent No subscribers registered for event class org.greenrobot.eventbus.NoSubscriberEvent
I registriere Fragment in onResume
und deregistrieren es in
@Override
public void onResume() {
super.onResume();
EventBus.getDefault().register(this);
if (mDebug) Log.d(LOG_TAG, EventBus.getDefault().isRegistered(this) + "");
}
@Override
public void onPause() {
super.onPause();
EventBus.getDefault().unregister(this);
}
Log-Anweisung in onResume zeigt, dass das Fragment erfolgreich registriert wurde. Hier
ist onEvent Methode:
@Subscribe
public void onEvent(UpdateUIEvent event) {
if (mSwipeRefreshLayout.isRefreshing())
mSwipeRefreshLayout.setRefreshing(false);
}
Ich versuchte Methode aufzurufen onEvent mit Hintergrund threadmode aber es half nicht.
Danach habe ich versucht, Handler zu verwenden, um Ereignis zu buchen, aber Eventbus kann immer noch keine registrierten Abonnenten für Ereignis finden.
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
EventBus.getDefault().post(new UpdateUIEvent());
}
});
Hier ist meine onPerform Methode der Sync-Adapter:
@Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) {
// Fetch data from server
} finally {
// close everything
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Log.d(LOG_TAG, "Update event");
EventBus.getDefault().post(new UpdateUIEvent());
}
});
}
}
Wie kann ich EventBus
Ereignis von einem Sync-Adapter an ein Fragment mit Greenrobot schicken?
Versuchen Sie Ihre Event-Handler von onEvent zu onEventMainThread ändern. Hast du überprüft, ob dein Fragment onPause durchgelaufen ist? – Francesc
Ich habe versucht, Methodenname zu ändern und auch versucht, threadmode MAIN Annotation hinzufügen, aber es hat nicht geholfen. Ja, ich habe es überprüft. @Francesc –
Also ist dein Fragment pausiert? Es wird offensichtlich nichts empfangen können, wenn es onPause durchlaufen hat. – Francesc