因项目需求,发送http请求需要传递数据过去,因此重写了一下Volley这个框架的JsonArrayRequest和jsonObjectRequest。Volley 的扩展性还是蛮好的。
JsonArrayPostRequst.java
package com.jxlg.eddie.utils; import java.io.UnsupportedEncodingException; import java.util.Map; import org.json.JSONArray; import org.json.JSONException; import com.android.volley.AuthFailureError; import com.android.volley.NetworkResponse; import com.android.volley.ParseError; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.toolbox.HttpHeaderParser; /** * 重写volley的JsonArrayRequest * @author Eddie * */ public class JsonArrayPostRequst extends Request<JSONArray>{ private Map<String,String> mMap; private Listener<JSONArray> mListener; public JsonArrayPostRequst(String url,Listener<JSONArray> listener, ErrorListener errorListener,Map map) { super(Request.Method.POST, url, errorListener); mListener=listener; mMap=map; // TODO Auto-generated constructor stub } @Override protected Map<String, String> getParams() throws AuthFailureError { // TODO Auto-generated method stub return mMap; } @Override protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success(new JSONArray(jsonString), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JSONException je) { return Response.error(new ParseError(je)); } } @Override protected void deliverResponse(JSONArray response) { mListener.onResponse(response); } }
JsonObjectPostRequest.java
package com.jxlg.eddie.utils; import java.io.UnsupportedEncodingException; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; import com.android.volley.AuthFailureError; import com.android.volley.NetworkResponse; import com.android.volley.ParseError; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.toolbox.HttpHeaderParser; /** * 重写jsonObject * @author Eddie * */ public class JsonObjectPostRequest extends Request<JSONObject>{ private Map<String,String> mMap; private Listener<JSONObject> mListener; public JsonObjectPostRequest(String url,Listener<JSONObject> listener, ErrorListener errorListener,Map map) { super(Request.Method.POST, url, errorListener); mListener=listener; mMap=map; } @Override protected Map<String, String> getParams() throws AuthFailureError { return mMap; } @Override protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success(new JSONObject(jsonString), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JSONException je) { return Response.error(new ParseError(je)); } } @Override protected void deliverResponse(JSONObject response) { mListener.onResponse(response); } }
很简单,跟之前的一样用。关键是在后台如何接收参数,后台写的servlet 或者pringMVC得到HttpServletRequest对象,使用getparameter获取参数即可。