Ich habe Probleme mit EventBus 3.0.0 mit dem ich ein einzelnes Ereignis wie diesem Beitrag:EventBus ruft zwei verschiedene Handler für einen einzelnen Beitrag
Call<List<SessionSpec>> call = httpService.getSessionSpecs();
call.enqueue(new Callback<List<SessionSpec>>() {
@Override
public void onResponse(Call<List<SessionSpec>> call, Response<List<SessionSpec>> response) {
if (response.isSuccessful()) {
List<SessionSpec> specs = response.body();
EventBus.getDefault().post((List<SessionSpec>)specs);
}
else Log.e(TAG, "sendSessionSpecs(): request NOT successful");
}
@Override
public void onFailure(Call<List<SessionSpec>> call, Throwable t) {
Log.e(TAG, "sendSessionsSpecs(): failed");
}
});
Ich habe zwei Teilnehmer im gleichen Fragment, die jeweils mit unterschiedlichen Signaturen , aber sie sind beide aus einem einzigen Beitrag genannt zu werden:
@Subscribe
public void onSessionSpec(List<SessionSpec> specs) {
Log.d(TAG, "onSessionSpec(): entered");
Log.d(TAG, " : number of session specs: " + specs.size());
}
Der zweite Teilnehmer ist definiert als:
@Subscribe
public void onOverlayType(List<OverlayType> types) {
Log.d(TAG, "onOverlayType(): entered");
Log.d(TAG, " : number of overlay types: " + types.size());
}
Beide Callbacks sind in einem einzigen Fragment, das aktiv ist, wenn der Post fertig ist, und ich habe überprüft, dass der Post nur einmal aufgerufen wird. Wenn das einzelne SessionSpec-Ereignis gepostet wird, werden sowohl die onSessionSpec- als auch die onOverlayType-Callbacks von EventBus mit dem Ereignistyp List> ausgelöst, sodass der onOverlayType-Callback in seinem Callback-Argument den falschen Typ erhält. Die Klasse OverlayType ist eine einfache POJO-Klasse mit 2 Mitgliedern, einem int "sid" und einem String "name". Die Klasse SessionSpec ist komplexer. Es hat einen Member String "name", aber ansonsten ist nichts anderes zwischen diesen 2 Klassen üblich. Ich habe überprüft, dass in der SessionSpec-Klasse nichts dem Begriff "OverlayType" ähnelt.
Die Schnittstellendefinition ist dies:
public interface VcapHttpInterface {
@GET("overlay/types")
Call<List<OverlayType>> getOverlayTypes();
@GET("session/list")
Call<List<SessionSpec>> getSessionSpecs();
@GET("session/{id}")
Call<Session> getSession(@Path("id") int sid);
}
Die getSession Ereignis post/Rückruf keine Probleme hat.
Ich habe den ganzen Tag versucht, herauszufinden, was schief läuft, also bin ich an dieser Stelle ratlos. Weiß jemand, was mit meinem Code falsch ist?
Danke, -Andres
Edit: Wie EventBus wissen, welche Handler für eine bestimmte Reaktion zu nennen? Einige Posts, die ich gelesen habe, sagten, dass EventBus nicht die Handler-Signatur verwendet, aber wie sonst würde es wissen, wie man eine Antwort auf die rechte abonnierte Handler-Routine abbildet? Gibt es eine Möglichkeit, den Handler-Rückruf für ein bestimmtes Ereignis explizit zu definieren?
das hat es getan. Es macht jetzt alles Sinn. Danke für Ihre Hilfe. –