【问题标题】:android volley gives client error code 400android volley 给客户端错误代码 400
【发布时间】:2019-04-16 10:04:14
【问题描述】:

我正在尝试发出 POST 请求以从我的 Web API(由 asp.net mvc 编写)获取令牌,它在 Postman 中工作(我得到一个有效的 JSON 对象),但不使用 Volley。使用以下代码:

  String url = "https://branj.ir/Token";

    Response.Listener<String> listener= new Response.Listener<String>() {
      @Override
      public void onResponse(String jsonResult) {

        Log.i(G.Tag, "volley result: " + jsonResult);
      }
    };
    Response.ErrorListener errorListener=   new Response.ErrorListener() {
      @Override
      public void onErrorResponse(VolleyError error) {

        error.printStackTrace();
        Log.d(G.Tag, "Error: " + error
          + "\nStatus Code " + error.networkResponse.statusCode
          + "\nCause " + error.getCause()
          + "\nmessage" + error.getMessage());
      }
    };

    StringRequest   request = new StringRequest  (
      Request.Method.POST,
      url,
      listener,
      errorListener

    )
 {
      @Override
      public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String,String> params = new HashMap<String, String>();
        params.put("Content-Type","application/x-www-form-urlencoded");
        params.put("Accept", "application/json");
        return params;
      } }
 ;

logcat 是:

 BasicNetwork.performRequest: Unexpected response code 400 for https://branj.ir/Token
11-13 16:55:59.608 21200-21200/ir.branj.app.wideidea.ir.branj D/Branj: Error: com.android.volley.ClientError
    Status Code 400
    Cause null
    messagenull

【问题讨论】:

  • 服务器返回错误 400,因为请求不正确。如果您想在出现错误时获得服务器发送的响应,那么您必须在onErrorResponse 函数中阅读error.networkResponse.dataerror.getMessage() 不是寻找服务器端响应的正确位置。
  • 检查这个 STRINGREQUEST 代码:- stackoverflow.com/a/52531318/7319704

标签: android api model-view-controller android-volley


【解决方案1】:

我将应用程序代码更改如下,我的问题得到了解决

 public static void Token(final String username, final String password) {

    String url = BASE_URL + "Token";

    Response.Listener<String> listener= new Response.Listener<String>() {
      @Override
      public void onResponse(String jsonResult) {

        Log.i(G.Tag, "volley result: " + jsonResult);
      }
    };
    Response.ErrorListener errorListener=   new Response.ErrorListener() {
      @Override
      public void onErrorResponse(VolleyError error) {
        error.printStackTrace();
        Log.d(G.Tag, "Error: " + error
          + "\nStatus Code " + error.networkResponse.statusCode
          + "\nCause " + error.getCause()
          + "\nnetworkResponse " + error.networkResponse.data.toString()
          + "\nmessage" + error.getMessage());
      }
    };

    StringRequest   request = new StringRequest  (
      Request.Method.POST,
      url,
      listener,
      errorListener
    )
    {
      @Override
      public Map<String, String> getParams() throws AuthFailureError {
        Map<String,String> params = new HashMap<>();
        params.put("username", username);
        params.put("password", password);
        params.put("grant_type", "password");
        return params;
      }
    } ;
    G.getInstance().addToRequestQueue(request);
  }

【讨论】:

    【解决方案2】:

    { “错误”:“unsupported_grant_type” } 当我在邮递员上使用您的请求时,我收到了错误,因为凌空的身体不正确。

    【讨论】:

    • 使用这个参数作为body Map params = new HashMap(); params.put("用户名", "NamadTest"); params.put("密码", "NamadTest"); params.put("grant_type", "password");
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 2012-07-04
    相关资源
    最近更新 更多