android – Volley Server Error null null网络响应

每次我尝试使用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插件)或任何其他方式向网址发送帖子请求并查看其响应内容.

在确保您的服务器没有问题之后,让我们用排球来解决问题.

使用POST方法时,JsonObjectRequest存在一些问题.
像这样Volley JsonObjectRequest Post request not working.

我建议你首先使用StringRequest并像之前一样覆盖getParams方法.在您完成此任务后,您可以尝试编写自己的请求,这不是非常困难但非常有用.

我还建议在requestQueue.add(request);之前添加request.setShouldCache(false).默认情况下,volley将响应保存在其缓存中,此行为可能会导致一些奇怪的问题.

相关文章

以下为个人理解,如错请评 CE: 凭据加密 (CE) 存储空间, 实际路径/data/user_ce/ DE: 设备加密 (DE) 存...
转载来源:https://blog.csdn.net/yfbdxz/article/details/114702144 用EventLog.writeEvent打的日志(或...
事件分发机制详解 一、基础知识介绍 1、经常用的事件有:MotionEvent.ACTION_DOWN,MotionEvent.ACTION...
又是好久没有写博客了,一直都比较忙,最近终于有时间沉淀和整理一下最近学到和解决的一些问题。 最近进...
Android性能优化——之控件的优化 前面讲了图像的优化,接下来分享一下控件的性能优化,这里主要是面向...
android的开源库是用来在android上显示gif图片的。我在网上查了一下,大家说这个框架写的不错,加载大的...