2016-08-03 24 views
2

Ich versuche, Daten zwischen Fragmenten und Retrofit-Services mit dem Event Bus zu übertragen.So führen Sie eine Nachrüstung mit dem Ereignisbus durch

Einige Bedingungen, die Dinge ein wenig komplizierter machen:

  1. Fragment1 und Fragment2 können identische Daten fordern sollte, so dass nur ein Anforderung an den Server ausgeführt werden.
  2. Fragment1 und Fragment2 können sie denselben Datentyp mit unterschiedlichen Daten empfangen (zB Fragment1 zeigt Anwenderdaten, Fragment2 zeigt Daten des Benutzers Freund) .Das Ereignis Bustrigger beide onUserResponse(User user) in Fragment1 und onUserFriendResponse(User userFriend) in Fragment2

macht Mein derzeitiger Ansatz ist Antwortumbruch. Kennen Sie bessere Möglichkeiten?

Antwort

1

Ohne weitere Informationen, es ist schwer genug zu wissen, um im Detail zu beantworten.

  1. Sie können Anfragedaten zwischenspeichern, wenn Sie sich sicher sind, dass sie sich nicht oft ändern werden. Die API-Serviceklasse (die Ihre Retrofit-Aufrufe ausführt) kann entscheiden, ob eine HTTP-Anfrage erstellt oder nur die zwischengespeicherten Daten bereitgestellt werden sollen. Dieser Cache sollte gelöscht werden, wenn die Möglichkeit besteht, dass sich die Daten geändert haben, z. wenn Sie sich an- oder abmelden oder eine Anfrage ausführen, die die Daten ändert.

  2. Für die meisten Ereignis Bussysteme (wie Otto zum Beispiel) ist es egal, was die Bus-Antwort-Methode aufgerufen wird, sondern hängt von der Parameter Objektklasse, die in Ihrem Fall User ist. Es wäre ziemlich typisch, die Daten in ein Ereignisobjekt zu packen (wie Sie sagen, dass Sie es tun), so dass Sie in Fragment2 onUserResponse(UserResponseEvent event) und in Fragment2 onUserFriendResponse(UserFriendResponseEvent event) haben könnten. Jedes Ereignisobjekt umschließt den Benutzer einfach.

z.

public class UserResponseEvent { 
    private final User user; 

    public UserResponseEvent(User user) { 
     this.user = user; 
    } 

    public User getUser() { 
     return user; 
    } 
} 
2

Wrapping ist eine gute Lösung. Wickeln Sie Ihre User Klasse in zwei verschiedene Event Klassen wie UserEvent und UserFriendEvent. Auf diese Weise werden verschiedene Ereignisse ausgelöst und ein Fragment wird nicht vom Ereignis des anderen beeinflusst.