带有空网络响应的射击服务器错误



每次我尝试使用凌空作业方法时,我都会获得严重错误。我在getCause中获得null值,并且在getNetworkResponse.toString()。

中获得了一些默认值。

如果我使用获取方法,则可以正常工作(我从URL中得到响应)。

有人可以帮助我该怎么办?

    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);

错误日志:

错误: 错误:com.android.volley.servererror>> 404>> [b@42b1e0d0>> null>> null>> null

更新: NetworkResponse.StatusCode AS 404,尽管URL是可访问的(如果我只使用Get Method,则返回数据)。如果我删除了邮政方法中的标题部分,则仍然相同。

url:

<?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);
?>

问题是您的队列。更改您的排球代码:

 RequestQueue queue = Volley.newRequestQueue(this);
 String URL = EndPoints.BASE_URL + "/call";
 StringRequest request = new StringRequest(Request.Method.POST, URL,
  new Response.Listener<String>()
  {
    @Override
    public void onResponse(String response) {
      Log.d("onResponse", response);
    }
  },
  new Response.ErrorListener()
  {
    @Override
    public void onErrorResponse(VolleyError error) {
      NetworkResponse response = error.networkResponse;
      String errorMsg = "";
      if(response != null && response.data != null){
        String errorString = new String(response.data);
        Log.i("log error", errorString);
      }
    }
  }
) {
  @Override
  protected Map<String, String> getParams()
  {
    Map<String, String> params = new HashMap<String, String>();
    params.put("key_1","value_1");
    params.put("key_2", "value_2");
    Log.i("sending ", params.toString());
    return params;
  }
};

 // Add the realibility on the connection.
 request.setRetryPolicy(new DefaultRetryPolicy(10000, 1, 1.0f));
  // Start the request immediately
    queue.add(request);  

和您的php(laravel)代码:

    $response['success'] = true;
    $response['user']['tell'] = $user->tell;
    $response['user']['code'] = $user->code;
    $response['user']['time'] = $time;
    $response['user']['register_state'] = '1'
    return response()->json($response, 200);

首先,尝试确保您的服务器运行良好。您可以使用Postman(Chrome插件)或任何其他方式将POST请求发送到URL并查看其响应。

确保您的服务器没有问题,让我们解决凌空的问题。

使用Post方法时,JsonObjectRequest存在一些问题。像这样的凌空jsonobjectRequest帖子请求不起作用。

我建议您首先使用StringRequest并像以前一样覆盖getParams方法。生存此任务后,您可以尝试编写自己的请求,不是很困难,但非常有用。

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

好吧,我认为您可以首先在logcat

中打印响应。

添加此代码,然后再添加到队列

request.setretrypolicy(新的defaultretrypolicy(0,-1, defaultretrypolicy.default_backoff_mult);

有时,请求是在您的PHP完全执行之前的超时。因此,请尝试此代码。也许可以帮助

也许与您的操作员有关...

我遇到同样的问题,将jasonobject与凌空发送。

我用两个不同的操作员在9-10个设备上测试了我的应用程序。

一个操作员上的请求返回一个错误,其中所有内容null或空白数据都可以正常工作,我成功地从API那里得到了响应。

我不知道操作员会做什么导致这个问题...也许他们使用某种阻止发送JsonObject的防火墙。

我试图将响应显示为字符串,并且错误发生了。

在要显示错误或使用该错误的任何地方使用response.toString()

在我的情况下,答案是重试策略设置。我将30秒的超时值放在30000中,而不是30秒。

尝试增加超时。我遇到了同样的问题,请求超时是问题。

最新更新