当我在 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);
造成这种情况的可能原因是什么?
我也有同样的问题。它耗尽了我一整天的时间。最后,我发现了一个小错误,那就是我在参数中传递了一个空值。
检查您是否在 getParams() 或 JSON 对象中将 null 值传递给服务器。如果是的话,那可能就是问题所在。
在下面的方法中
public void onErrorResponse(VolleyError error)
添加这一行:-
error.printStackTrace()
您将获得所有堆栈跟踪,从而给出实际错误。我也遇到了这个错误,但就我而言,它实际上是 TimeoutException。
响应代码 400 表示错误请求。
一些原因。
您可能还需要告诉您的服务器发送带有代码 200 的响应,齐射检查此代码。
此错误的一些可能原因:
此错误可能意味着错误请求,请检查您发送的标头。覆盖 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");
仔细检查您的参数(不应有空参数)。如果没问题,那么如果您正在使用
JSONObjectRequest
,则根据新的 Google 政策删除 Request.Method.GET
。
我遇到了类似的问题,但后来我意识到我的 URL 没有使用 HTTPS;这是 HTTP。当我切换到 HTTPS 后,它运行得很好。请仔细检查以确保您没有同样的疏忽