多个回调设计模式?

时间:2014-09-19 11:59:43

标签: android android-async-http

这个问题与设计有关。我使用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 Callback,所以我不必在每个方法调用中不断重复它。想知道我是否可以使用其他漂亮的设计模式方法。

注意

我已经考虑过将其子类化,正如其他人所建议的那样,但我似乎无法以这种方式获得json对象的响应。 感谢

3 个答案:

答案 0 :(得分: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());

答案 1 :(得分: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 );

答案 2 :(得分:0)

如何将其提取为方法:

private void restClients(RestClient restClient){
    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
        }
    });
}

然后只需调用该方法:

restClients(restclient1)