每次我尝试使用Volley的POST方法时,都会出现严重错误.我在getCause中得到null值,在getNetworkResponse.toString()中得到一些默认值.
如果我使用GET方法,这工作正常(我从我的网址得到回复).
任何人都可以帮我做什么?
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将响应保存在其缓存中,此行为可能会导致一些奇怪的问题.