【问题标题】:Getting com.android.volley.ServerError using the Volley library. What are some possible causes?在 volley 库中给出 com.android.volley.ServerError
【发布时间】:2017-02-15 01:37:25
【问题描述】:

我尝试登录我的应用程序,当我尝试使用 volley 库调用 API 时,它给出 com.android.volley.ServerError 和响应代码 400。

final String username = editTextUsername.getText().toString().trim();
        final String password =   editTextPassword.getText().toString().trim();
        final String email = editTextEmail.getText().toString().trim();

  StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();
                    }
                }){
            @Override
            protected Map<String,String> getParams(){
                Map<String,String> params = new HashMap<String, String>();
                params.put(KEY_USERNAME,username);
                params.put(KEY_PASSWORD,password);`enter code here`
                params.put(KEY_EMAIL, email);
                return params;
            }

        };

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }    

我看到了很多例子,但我没有得到任何解决方案。

【问题讨论】:

  • 您的代码乍一看还不错,除了 getParams() 中的“在此处输入代码”。您不显示 URL,也许这是不正确的。我建议使用 tcpdump 或 wireshark 捕获网络上的请求,并将其与来自浏览器或 Postman 的工作请求进行比较。
  • 根据我的经验,您的 php 脚本也可能有问题。

标签: android android-volley


【解决方案1】:

我有同样的问题。它耗尽了我的一整天。最后,我发现了一个小错误,就是我在参数中传递了一个空值。

检查您是否在 getParams() 或 JSON 对象中将空值传递给服务器。如果是,那可能就是问题所在。

【讨论】:

  • 如果对某人有帮助:您不想传递任何参数? --> 将其设置为 null 但不要使用空的 HashMap 作为第二个参数 例如这有效 JsonObjectRequest(YOUR_URL, null, ...)
【解决方案2】:

在下面的方法中

public void onErrorResponse(VolleyError error)

添加这一行:-

error.printStackTrace()

您将获得所有堆栈跟踪信息,这些跟踪信息会为您提供实际错误。我也遇到了这个错误,但在我的情况下它实际上是 TimeoutException。

【讨论】:

    【解决方案3】:

    响应代码 400 表示错误请求。

    其中的一些原因。

    1. Request 方法可能存在问题。是 GET 还是 POST。
    2. API 可能需要授权标头。

    【讨论】:

      【解决方案4】:

      此错误可能意味着错误的请求,请检查您发送的标头。覆盖 getHeaders() 方法,您可以发送正确的标题。

      @Override
      public Map<String, String> getHeaders() throws AuthFailureError {
              return (headers != null || headers.isEmpty()) ? headers : super.getHeaders();
          }
      

      另外,通常WebServices需要application/json headers,如下:

      headers.put("Accept","application/json");
      headers.put("Content-Type","application/json");
      

      【讨论】:

        【解决方案5】:

        是什么导致了这个错误... 1.错误的网址,检查您的网址是否有任何错误。 2.缺少参数,任何参数都具有空值,或者您缺少任何参数。 3.注意参数中定义的Keys,它应该与APIs的匹配。 希望对您有所帮助!

        【讨论】:

          【解决方案6】:

          您的 java 代码和 php 代码中必须有相同的方法。您使用 volley 库为服务器定义了“POST”方法,现在您必须在服务器的 php 文件中有“POST”方法才能发出请求。

          【讨论】:

            【解决方案7】:

            您可能还需要告诉您的服务器发送带有代码 200 的响应,凌空检查此代码。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-05-19
              • 2020-02-19
              • 1970-01-01
              • 2018-11-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多