1

この質問はよりデザインに関連しています。Android Async-Http-Client ライブラリhttp://loopj.com/android-async-http/を使用して、クラス内の異なるメソッドから複数の呼び出し要求を作成しているため、私のコードは次のようになります

RestClient.post(context, "", entity, "application/json", new JsonHttpResponseHandler() {
                @Override
                public void onSuccess(int statusCode, Header[] headers, JSONObject response) {

                }

                @Override
                public void onSuccess(int statusCode, Header[] headers, JSONArray timeline) {
                    // Map objects from json using gson
                }
            });

私のクラスの異なるメソッドが上記のコードのような同様の呼び出しを行いますが、異なる要求パラメーターを使用する場合、すべてのメソッド呼び出しで繰り返し続ける必要がないように、ResponseHandler コールバックをカプセル化するにはどうすればよいですか。ここで使用できる他の素敵なデザインパターン方法があるかどうか疑問に思っていました.

ノート

私はそれをサブクラス化することを考えましたが、他の人が示唆しているように、jsonオブジェクトの応答をそのように取得できないようです。ありがとう

4

3 に答える 3

0

呼び出しごとに新しいハンドラーを作成する必要はありません。

JsonHttpResponseHandler myHandler = new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {

            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONArray timeline) {
                // Map objects from json using gson
            }
        };

RestClient.post( context, "", entity, "application/json", myHandler );
于 2014-09-19T12:36:18.303 に答える
0

コールバックの動作は、これらすべてのリクエストで同じですか? その場合、JsonHttpResponseHandler の単一の共有インスタンスを作成し、それをどこでも使用できます。

private JsonHttpResponseHandler handler = new JsonHttpResponseHandler() {
    @Override
    public void onSuccess(...) {
        ...
    }
}

...

RestClient.post(..., handler);

または、JsonHttpResponseHandler のサブクラスを作成して使用することもできます。

public class MyResponseHandler extends JsonHttpResponseHandler {
    @Override
    public void onSuccess(...) {
        ...
    }
}

...

RestClient.post(..., new MyResponseHandler());
于 2014-09-19T12:34:29.170 に答える