现在我正在探索一个 android 学习项目的一些选项。我正在尝试与我的 rails api(也是一个学习项目)进行交流。
在做了一些研究之后,我想我已经确定了一个使用改造和 otto 的方案。
我最终得到的是这个。当我想调用我的 Rails 服务器时(在这种情况下进行注册),我在活动中执行此操作。
mBus.post(new SignupRequestEvent(new UserRequestParams(mName,mEmail,mPassword,mPasswordConfirmation )));
然后在同一个活动中我有这个。
@Subscribe
public void onSignupCompleted(SignupCompletedEvent event) {
System.out.println(String.format("in onSignupCompleted, got token = %s ", event.getParams().getToken()));
}
这里的问题是,就目前而言,每个 api 请求类型及其对应的响应类型都是唯一的事件类型,并且需要它自己的类,这看起来像是很多样板类型的代码。
例如,要处理登录和注销,我需要这两个类:
public class SignupRequestEvent {
protected UserRequestParams mSignupParams;
public SignupRequestEvent(UserRequestParams signupParams) {
mSignupParams = signupParams;
}
public UserRequestParams getParams() {
return mSignupParams;
}
}
public class SignupCompletedEvent {
private SignupCompletedParams mSignupCompletedParams;
public SignupCompletedParams getParams() {
return mSignupCompletedParams;
}
public SignupCompletedEvent(SignupCompletedParams signupCompletedParams) {
mSignupCompletedParams = signupCompletedParams;
}
}
而且我认为大多数事件类几乎是相同的。
我在想我应该只有 2 个事件用于 api 调用,一个用于请求,一个用于响应,但是每个接收 api 响应事件的方法都需要检查它是否是对所需请求的响应。
这个选项的意思是这样的:
ApiRequestEvent apiRequestEvent = new ApiRequestEvent();
apiRequestEvent.setAction("SIGNUP");
apiRequestEvent.setParameters(new UserRequestParams(mName,mEmail,mPassword,mPasswordConfirmation ));
mBus.post(apiRequestEvent);
然后处理这样的响应:
@Subscribe
public void onSignupCompleted(ApiResponseAvailable event) {
if (event.getResponseTo != "SIGNUP") return;
System.out.println(String.format("in onSignupCompleted, got token = %s ", event.getParams().getToken()));
也许有一种使用泛型的方法?
当有一组事件可以像这样组合在一起时,有人可以解释如何有效地使用事件总线吗?