
我想向这个网站发出POST请求http://jsonblob.com/api
当我使用asynctask httppost时,我的代码可以工作
private static final String url = "http://Jsonblob.com/API/JsonBlob";@OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); new PostJsonTask().execute();}private class PostJsonTask extends AsyncTask<VoID,VoID,VoID> { @OverrIDe protected VoID doInBackground(VoID... params) { try { httpResponse response = post(); header s = response.getFirstheader("Location"); Log.d("PostJsonTask",s.getValue()); } catch (Exception e) { e.printstacktrace(); } return null; } private httpResponse post() throws Exception { // convert parameters into JsON object Map<String,String> params = new HashMap<String,String>(); params.put("user","Robby"); params.put("pass","zqdqzdqdqzd"); JsONObject holder = new JsONObject(params); httpClIEnt clIEnt = new DefaulthttpClIEnt(); httpPost post = new httpPost(url); StringEntity se = new StringEntity(holder.toString()); se.setContentType(new Basicheader(http.CONTENT_TYPE,"application/Json")); post.setheader("Accept","application/Json"); post.setheader("Content-type","application/Json"); post.setEntity(se); return clIEnt.execute(post); }} 使用此代码,我可以成功获取Location参数.
但我想用Volley库做这个,我已经有了以下代码:
private static final String url = "http://Jsonblob.com/API/JsonBlob";@OverrIDeprotected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); RequestQueue queue = Volley.newRequestQueue(this); StringRequest request = new StringRequest(Request.Method.POST,url,createResponseListener(),createErrorListener()) { @OverrIDe public Map<String,String> getheaders() throws AuthFailureError { Map<String,String> headers = new HashMap<String,String>(); headers.put("Accept","application/Json"); headers.put("Content-type","application/Json"); return headers; } @OverrIDe protected Map<String,String> getParams() throws AuthFailureError { Map<String,String>(); params.put("user","Robby"); params.put("pass","zqdqzdqdqzd"); return params; } @OverrIDe protected Response<String> parseNetworkResponse( NetworkResponse response) { Map<String,String> headers = response.headers; String location = headers.get("Location"); Log.d("PostJsonTask",location); return super.parseNetworkResponse(response); } }; queue.add(request);}private ErrorListener createErrorListener() { return new ErrorListener() { @OverrIDe public voID onErrorResponse(VolleyError error) { error.printstacktrace(); } };}private Listener<String> createResponseListener() { return new Listener<String>() { @OverrIDe public voID onResponse(String response) { Log.d("PostJsonTask",response); } };} 但这会返回代码为400的VolleyError.我该如何解决这个问题?
解决方法 尝试设置bodyContentType并在postman(web)中设置内容类型的主体,而不是尝试设置内容类型的标题JsonObjectRequest JsonObjReq = new JsonObjectRequest(Method.POST,obj,new Response.Listener<JsONObject>() { @OverrIDe public voID onResponse(JsONObject response) { Log.d("Response",response.toString()); } },new Response.ErrorListener() { @OverrIDe public voID onErrorResponse(VolleyError error) { Log.d("Error",error.toString()); } }) @OverrIDe public String getbodyContentType() { return "application/Json"; }}; 总结 以上是内存溢出为你收集整理的android – Volley POST请求,400错误全部内容,希望文章能够帮你解决android – Volley POST请求,400错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)