Volley的编码问题?

时间:2015-06-20 18:10:20

标签: android android-volley

我今天几乎整天都在努力解决这个问题:

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

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

假设采用JSON格式,请尝试扩展JsonRequest而不是Request。

或者:

  1. 扩展请求,并声明一个字符串字段(例如params) 其中包含您的请求参数。

  2. 覆盖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;来解决问题。现在好了:))