每次我尝试使用Volley的POST方法时,都会出现严重错误.我在getCause中得到null值,在getNetworkResponse.toString()中得到一些默认值.
任何人都可以帮我做什么?
Map<String,String> jsonParams = new HashMap<String,String>(); jsonParams.put("teststr","abd"); RequestQueue requestQueue = VolleySingleton.getInstance().getRequestQueue(); JsonObjectRequest request = new JsonObjectRequest( Request.Method.POST,url,new JSONObject(jsonParams),new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { Toast.makeText(getApplicationContext(),"Success"+response.toString(),Toast.LENGTH_LONG).show(); }catch(Exception e){ Toast.makeText(getApplicationContext(),"JSON ERROR",Toast.LENGTH_LONG).show(); } } },new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.d("abd","Error: " + error + ">>" + error.networkResponse.statusCode + ">>" + error.networkResponse.data + ">>" + error.getCause() + ">>" + error.getMessage()); } }) { @Override protected Map<String,String> getParams() { HashMap<String,String> params = new HashMap<String,String>(); params.put("key","value"); return params; } @Override public Map<String,String> getHeaders() throws AuthFailureError { HashMap<String,String> headers = new HashMap<String,String>(); headers.put("Content-Type","application/json; charset=utf-8"); return headers; } }; requestQueue.add(request);
错误日志:
Error:
Error: com.android.volley.ServerError>>404>>[B@42b1e0d0>>null>>null
更新:
networkResponse.statusCode来自404,尽管url是可访问的(如果我只使用GET方法则返回数据).如果我在POST方法中删除标题部分,仍然是相同的.
网址:
<?PHP $response = array(); $jsonString = file_get_contents('PHP://input'); $jsonObj = json_decode($jsonString,true); if(!isset($jsonObj['teststr'])){ $response["msg"] = "No data."; }else{ $response["msg"] = "Success: ".$jsonObj['teststr']; } echo json_encode($response); ?>
解决方法
首先,尝试确保您的服务器运行良好.
您可以使用Postman(chrome插件)或任何其他方式向网址发送帖子请求并查看其响应内容.
您可以使用Postman(chrome插件)或任何其他方式向网址发送帖子请求并查看其响应内容.
在确保您的服务器没有问题之后,让我们用排球来解决问题.
使用POST方法时,JsonObjectRequest存在一些问题.
像这样Volley JsonObjectRequest Post request not working.
我建议你首先使用StringRequest并像之前一样覆盖getParams方法.在您完成此任务后,您可以尝试编写自己的请求,这不是非常困难但非常有用.
我还建议在requestQueue.add(request);之前添加request.setShouldCache(false).默认情况下,volley将响应保存在其缓存中,此行为可能会导致一些奇怪的问题.