感覺老師這個二次封裝有些復雜,下面是我做的簡化版本。
public?abstract?class?VolleyListener?{ ????public?abstract?void?onSuccess(String?result); ????public?abstract??void?onError(VolleyError?error); ????public?Response.Listener<String>?loadingListener(){ ????????Response.Listener<String>?listener?=?new?Response.Listener<String>()?{ ????????????@Override ????????????public?void?onResponse(String?response)?{ ????????????????onSuccess(response); ????????????} ????????}; ????????return?listener; ????} ????public?Response.ErrorListener?getErrorListener(){ ????????Response.ErrorListener?errorListener?=?new?Response.ErrorListener(){ ????????????@Override ????????????public?void?onErrorResponse(VolleyError?error)?{ ????????????????onError(error); ????????????} ????????}; ????????return?errorListener; ????} }
Request封裝
public?class?VolleyRequest?{ ????private?static?StringRequest?stringRequest; ????//有全局RequestQueue的GET請求 ????public?static?void?requestGlobalGET(String?url,String?tag,VolleyListener?listener){ ????????BaseApplication.getRequestQueue().cancelAll(tag); ????????stringRequest?=?new?StringRequest(Request.Method.GET,url,listener.loadingListener(),listener.getErrorListener()); ????????stringRequest.setTag(tag); ????????BaseApplication.getRequestQueue().add(stringRequest); ????} ????//有全局RequestQueue的POST請求 ????public?static?void?requestGlobalPOST(String?url,String?tag,VolleyListener?listener){ ????????BaseApplication.getRequestQueue().cancelAll(tag); ????????stringRequest?=?new?StringRequest(Request.Method.POST,url,listener.loadingListener(),listener.getErrorListener()); ????????stringRequest.setTag(tag); ????????BaseApplication.getRequestQueue().add(stringRequest); ????} ????//無全局RequestQueue的GET請求 ????public?static?void?requestGET(Context?context,String?url,String?tag,VolleyListener?listener){ ????????RequestQueue?queue?=?Volley.newRequestQueue(context); ????????stringRequest?=?new?StringRequest(Request.Method.GET,url,listener.loadingListener(),listener.getErrorListener()); ????????stringRequest.setTag(tag); ????????queue.add(stringRequest); ????} ????//無全局RequestQueue的GET請求 ????public?static?void?requestPOST(Context?context,String?url,String?tag,VolleyListener?listener){ ????????RequestQueue?queue?=?Volley.newRequestQueue(context); ????????stringRequest?=?new?StringRequest(Request.Method.POST,url,listener.loadingListener(),listener.getErrorListener()); ????????stringRequest.setTag(tag); ????????queue.add(stringRequest); ????} }
調用
//有全局requestqueue無需加this,否則要加上下文 VolleyRequest.requestGET(this,"http://www.baidu.com","get",new?VolleyListener()?{ ????@Override ????public?void?onSuccess(String?result)?{ ????????Log.i("TAG",?result); ????} ????@Override ????public?void?onError(VolleyError?error)?{ ????????Log.i("TAG",?error.getMessage()); ????} });