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 的单个共享实例并在任何地方使用它:

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 回答
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

如何将其提取为方法:

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)
于 2020-08-27T12:03:25.187 回答