我今天几乎整天都在努力解决这个问题:
我在Android上使用Volley发送POST请求,参数为字符串。当我在我的应用程序中发送它时字符串似乎很好,但是当它以某种方式到达PHP服务器时,编码似乎不同(有大写字母,如%7D等花括号)。我不确定出了什么问题。由于这个json_decode在PHP中失败,因为它会出现语法错误。
我在客户端和后端级别都尝试了几种方法。在客户端我尝试了以下但没有任何作用。
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Content-Type", "application/json; charset=utf-8");
//params.put("Content-Type", "application/json");
return params;
}
@Override
public String getBodyContentType() {
return "application/json; charset=utf-8";
}
在服务器端(PHP)我尝试了多种方案将其更改为UTF-8等,但没有任何工作。
这里$ data1有%7D等,$ data2变为null,因为json_decode失败。
$ data1 = file_get_contents('php:// input');
$ data2 = json_decode($ data1);
有人可以帮忙吗?
答案 0 :(得分:1)
假设采用JSON格式,请尝试扩展JsonRequest而不是Request。
或者:
扩展请求,并声明一个字符串字段(例如params) 其中包含您的请求参数。
覆盖getBody:
@覆盖
public byte [] getBody()抛出AuthFailureError {
return params.getBytes(Charset.forName(&#34; UTF-8&#34;));
}
答案 1 :(得分:0)
感谢。我现在设法解决了。基本上我试图在这个JSON中添加2个实体 - 一个String和一个类的另一个对象。字符串很好,但我只是直接使用&#34; put&#34;添加对象。我通过&#34;在执行Gson.ToJson()后放置&#34;来解决问题。现在好了:))