如何将改造与事件总线配对
How to pair retrofit with event bus
我正在尝试使用事件总线在片段和改造服务之间传递数据。
一些情况会使事情变得有点复杂:
- Fragment1 和 Fragment2 可以请求相同的数据,所以只有一个
应该执行对服务器的请求。
- Fragment1 和 Fragment2 可以接收相同的数据类型但其中包含不同的数据(例如 Fragment1
显示用户数据,Fragment2 显示用户朋友的数据)。这使得事件总线在 Fragment1 中触发
onUserResponse(User user)
,在 Fragment2 中触发 onUserFriendResponse(User userFriend)
我目前的方法是响应包装。你知道更好的方法吗?
包装是一个很好的解决方案。将 User
class 包裹在两个不同的 Event
class 中,例如 UserEvent
和 UserFriendEvent
。这样做,将触发不同的事件,并且一个片段不会受到另一个事件的影响。
没有更多的信息,很难详细回答。
如果您确信请求数据不会经常更改,则可以缓存请求数据。 API 服务 class(进行 Retrofit 调用)可以决定是发出 HTTP 请求,还是只提供缓存数据。如果数据有可能发生变化,则应清除此缓存,例如当登录/注销,或执行一些会更改数据的请求时。
对于大多数事件总线系统(例如Otto),调用什么总线响应方法并不重要,而是取决于参数对象class ,在你的例子中是 User
。将数据包装在一个事件对象中是相当典型的(正如您所说的那样),因此您可以在 Fragment1 中使用 onUserResponse(UserResponseEvent event)
,在 Fragment2 中使用 onUserFriendResponse(UserFriendResponseEvent event)
。每个事件对象简单地包装 User.
例如
public class UserResponseEvent {
private final User user;
public UserResponseEvent(User user) {
this.user = user;
}
public User getUser() {
return user;
}
}
我正在尝试使用事件总线在片段和改造服务之间传递数据。
一些情况会使事情变得有点复杂:
- Fragment1 和 Fragment2 可以请求相同的数据,所以只有一个 应该执行对服务器的请求。
- Fragment1 和 Fragment2 可以接收相同的数据类型但其中包含不同的数据(例如 Fragment1
显示用户数据,Fragment2 显示用户朋友的数据)。这使得事件总线在 Fragment1 中触发
onUserResponse(User user)
,在 Fragment2 中触发onUserFriendResponse(User userFriend)
我目前的方法是响应包装。你知道更好的方法吗?
包装是一个很好的解决方案。将 User
class 包裹在两个不同的 Event
class 中,例如 UserEvent
和 UserFriendEvent
。这样做,将触发不同的事件,并且一个片段不会受到另一个事件的影响。
没有更多的信息,很难详细回答。
如果您确信请求数据不会经常更改,则可以缓存请求数据。 API 服务 class(进行 Retrofit 调用)可以决定是发出 HTTP 请求,还是只提供缓存数据。如果数据有可能发生变化,则应清除此缓存,例如当登录/注销,或执行一些会更改数据的请求时。
对于大多数事件总线系统(例如Otto),调用什么总线响应方法并不重要,而是取决于参数对象class ,在你的例子中是
User
。将数据包装在一个事件对象中是相当典型的(正如您所说的那样),因此您可以在 Fragment1 中使用onUserResponse(UserResponseEvent event)
,在 Fragment2 中使用onUserFriendResponse(UserFriendResponseEvent event)
。每个事件对象简单地包装 User.
例如
public class UserResponseEvent {
private final User user;
public UserResponseEvent(User user) {
this.user = user;
}
public User getUser() {
return user;
}
}