4

現在、Android 学習プロジェクトのいくつかのオプションを検討しています。Rails api (学習プロジェクトでもあります) と通信しようとしています。

いくつかの調査を行った後、レトロフィットとオットーを使用するスキームに落ち着いたと思います。

私が行き着くのはこれです。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 要求タイプとそれに対応する応答タイプが一意のイベント タイプになり、独自のクラスが必要になることです。これは多くのボイラー プレート タイプのコードのように見えます。

たとえば、サインインとサインアウトを処理するには、次の 2 つのクラスが必要です。

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;
    }

}

そして、ほとんどのイベント クラスはほぼ同じになると思います。

API 呼び出し用に 2 つのイベント (リクエスト用と応答用に 1 つ) が必要だと考えていますが、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()));

多分ジェネリックを使用する方法はありますか?

このようにグループ化できる一連のイベントがある場合に、イベントバスを効果的に使用する方法を誰かが説明できますか?

4

1 に答える 1

4

あなたはそれを考えすぎています - 先に進んで、各イベントのメッセージ オブジェクトを作成してください。

于 2014-05-09T00:23:27.960 に答える