本文为作者原创,转载请注明出处,否则将依法追究版权
注意:使用JsonObjectRequest或继承自JsonObjectRequest类的对象提交一个post请求时,如果有参数需要提交,就必须以JSONObject的json串方式提交.否则通过重写getParams()方法的方式提交不管用,getParams()方法中提交post参数只适用于Request对象。
直接上代码:第一部分是调用,第二部分是自定义JsonObjectRequestWithCookie
private void uploadUserOp(String opType, String musicKey) throws AuthFailureError { Log.w("LOG","invoke uploadUserOp with "+ opType+" and "+musicKey); HashMapopMap = new HashMap (); opMap.put("op", opType); opMap.put("key", musicKey); JSONObject opJsonObject = new JSONObject(opMap); JsonObjectRequestWithCookie jsonObjectRequestWithCookie = new JsonObjectRequestWithCookie(Constants.USER_HISTORY_URL,opJsonObject, new Response.Listener () { @Override public void onResponse(JSONObject jsonObject) { Log.w("LOG","get response jsonObject from post user history"+jsonObject.toString()); try { if(jsonObject.getString("status").equals("success")){ Log.w("LOG", "post /api/use/history/ success"); } else{ Log.w("LOG", "post /api/use/history/ failure"); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { Log.w("LOG", "操作失败"); } },opMap); jsonObjectRequestWithCookie.setCookie(localCookie); RequestManager.getRequestQueue().add(jsonObjectRequestWithCookie); }
import com.android.volley.Request;import com.android.volley.Response;import com.android.volley.toolbox.JsonObjectRequest;import org.json.JSONObject;import java.util.HashMap;import java.util.Map;/** * Created by lsc on 2014/12/24. */public class JsonObjectRequestWithCookie extends JsonObjectRequest { private MapmHeaders = new HashMap<>(); public JsonObjectRequestWithCookie(String url, JSONObject jsonRequest, Response.Listener listener, Response.ErrorListener errorListener,Map map) { super(Request.Method.POST, url, jsonRequest, listener, errorListener); } public JsonObjectRequestWithCookie(String url, JSONObject jsonRequest, Response.Listener listener, Response.ErrorListener errorListener){ super(url, jsonRequest, listener, errorListener); } //拿到客户端发起的http请求的Header @Override public Map getHeaders() throws AuthFailureError { return mHeaders; } //发送请求时,往Header中添加cookie,可以一并发送 public void setCookie(String cookie) throws AuthFailureError { mHeaders.put("User-Agent", "Android:1.0:2009chenqc@163.com"); mHeaders.put("Cookie",cookie); }}
更多类型的post解释,可参见: