使用 Volley 库获取 com.android.volley.ServerError。可能的原因有哪些?

问题描述 投票:0回答:8

当我在 Volley 中发出请求时,我收到

com.android.volley.ServerError
和响应代码 400。

我正在做这样的事情(通用示例代码):

final String param1 = "...";
final String param2 = "...";
// etc. 

StringRequest stringRequest = new StringRequest(Request.Method.POST, API_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("PARAM_1", param1);
        params.put("PARAM_2",password);
        return params;
    }

};

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

造成这种情况的可能原因是什么?

android android-volley
8个回答
8
投票

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

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


7
投票

在下面的方法中

public void onErrorResponse(VolleyError error)

添加这一行:-

error.printStackTrace()

您将获得所有堆栈跟踪,从而给出实际错误。我也遇到了这个错误,但就我而言,它实际上是 TimeoutException。


3
投票

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

一些原因。

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

1
投票

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


1
投票

此错误的一些可能原因:

  1. 网址错误。检查您的网址是否有任何错误。
  2. 缺少参数、任何参数为空值或者您缺少任何参数。
  3. 注意参数中定义的 Key,它应该与 API 的 Key 匹配。

1
投票

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

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

此外,通常 Web 服务需要 application/json 标头,如下所示:

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

0
投票

仔细检查您的参数(不应有空参数)。如果没问题,那么如果您正在使用

JSONObjectRequest
,则根据新的 Google 政策删除
Request.Method.GET


0
投票

我遇到了类似的问题,但后来我意识到我的 URL 没有使用 HTTPS;这是 HTTP。当我切换到 HTTPS 后,它运行得很好。请仔细检查以确保您没有同样的疏忽

© www.soinside.com 2019 - 2024. All rights reserved.