Volley ServerError代码:仅限Android 6中的400(Marshmallow)

时间:2018-01-29 13:42:30

标签: android android-volley

我在Android中使用Volley库做一个简单的GET请求。最近我发现在Android 6(Marshmallow)中我总是进入onErrorResponse回调,没有错误信息,但错误代码是400。 我所有其他几乎相同的请求在Android 6中完美运行。只有这一个是有问题的。 当我将请求URL粘贴到浏览器中时,它可以正常工作。所以问题不是来自服务器端。

我也尝试过添加标题,但这没有帮助。

3 个答案:

答案 0 :(得分:1)

我也使用Volley并且遇到了同样的问题。
问题是,在 Android 6.X棉花糖上,未对GET请求的UTF-8 URL参数进行编码。邓诺为什么...

因此,如果您发送GET请求,例如

http://example.com/api?key=my value

http://example.com/api?place=café

它将按以下方式发送:

在Android 6.X上

http://example.com/api?key=my value
http://example.com/api?place=café

(返回:400-HTTP_BAD_REQUEST)


其他版本

http://example.com/api?key=my+value
http://example.com/api?place=caf%C3%A9

(如果您的服务正常运行,则返回:200-HTTP_OK)


所以,我的解决方法是致电

URLEncoder.encode(value, "UTF-8");

每个参数。

答案 1 :(得分:0)

这个问题也出现在我身上,不是内容类型就是问题。 对我来说,在Android 7和更高版本的URL上,我所使用的也在浏览器上正常运行,但是在Android 6上对其进行检查时,它使我遇到了与您编写的相同的问题。 这是因为您的网址可能包含空格。

解决方案:

String url = "http://your_url.com/file.php?data=" + sendJson;
url = url.replaceAll(" ", "%20");

问题消失了!

答案 2 :(得分:0)

用URL中的“%20”替换空字符。  字符串url =“ https://zxasd/asd”;  url = url.replaceAll(“”,“%20”);