Android Volley库:我们总是要重复Response.Listener和Response.ErrorListener

时间:2015-09-19 20:35:21

标签: android android-volley

我最近在我的项目中开始使用Android Volley。 大多数教程中提到的常见做法是以这种方式使用它:

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
            url, null,
            new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    // do something
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    // do something.
                }
            });

我的查询是 - 我们是否必须在需要提出请求的任何地方重复此代码。我试图通过创建一个辅助类来放入一个共同的onResponse和onErrorResponse处理程序:

public class CustomJSONObjectRequest extends JsonObjectRequest {
    private BaseResource resource;
    private String queryId;
    private String paramArgs;

    public CustomJSONObjectRequest(int method, String url, JSONObject 
                               jsonRequest, 
                               Response.Listener<JSONObject> listener,
                               final Response.ErrorListener errorListener, 
                               final Context ctx,
                               final BaseResource baseResource) {
    super(method, url, jsonRequest,
            new Response.Listener<JSONObject>() {
                 // some common code for all BaseResources
            },
            new Response.ErrorListener() {
                // some common code
            });
}

但是这种方法的问题是我需要传递构造函数本身的每一件事,这让我觉得我没有正确地做到这一点。例如,如果我需要为url传递一些查询参数,我需要始终从调用者传入完整的url,尽管我仍然可以在一个地方生成一个通用逻辑来生成url。

有人可以让我知道实现这样的事情的最佳方法是什么。

1 个答案:

答案 0 :(得分:0)

创建一个传递url和参数的类(如“ApiManager”),创建Volley请求并跟踪回复和侦听器。 ApiManager通常会从调用类中获取结果的回调。这样,您只需键入一次Volley代码,而每次调用的逻辑都是简洁的。或者,我就是这样做的。