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

ev7lccsx  于 2023-10-14  发布在  Android
关注(0)|答案(8)|浏览(174)

当我在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);

可能的原因是什么?

pkbketx9

pkbketx91#

我也有同样的问题。它耗尽了我的一整天。最后,我发现了一个小错误,那就是我在参数中传递了一个null值。
检查是否在getParams()或JSON Object中向服务器传递空值。如果是的话,这可能就是问题所在。

34gzjxbg

34gzjxbg2#

在下面的方法

public void onErrorResponse(VolleyError error)

添加这一行:-

error.printStackTrace()

你会得到所有的堆栈跟踪,它会给你实际的错误。我也得到了这个错误,但在我的情况下,它实际上是TimeoutException。

vof42yt1

vof42yt13#

响应代码400表示请求错误。
一些原因。
1.请求方法可能有问题。它是GET还是POST?

  1. API可能需要授权标头。
im9ewurl

im9ewurl4#

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

1tuwyuhd

1tuwyuhd5#

此错误的一些可能原因:
1.错误的URL。请检查您的URL是否有任何错误。
1.缺少参数、任何参数具有空值或您缺少任何参数。
1.注意params中定义的Keys,它应该与API的Keys相匹配。

ozxc1zmp

ozxc1zmp6#

这个错误可能意味着BAD REQUEST,请检查您发送的报头。覆盖getHeaders()方法,您可以发送正确的头。

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

此外,通常WebServices需要application/json头文件,如下所示:

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

9avjhtql7#

仔细检查你的参数(不应该有空参数)。如果它的确定,然后如果你使用JSONObjectRequest然后删除Request.Method.GET按照新的谷歌政策.

of1yzvn4

of1yzvn48#

我遇到了类似的问题,但后来我意识到我的URL没有使用HTTPS;是HTTP。一旦我切换到HTTPS,它就完美地工作了。请仔细检查,以确保您没有同样的疏忽

相关问题