2015-06-20 39 views
0

我今天几乎整天都在为这个问题苦苦挣扎:Volley的编码问题?

我使用Volley在Android上发送一个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变为空,因为json_decode失败。

$ data1 = file_get_contents('php:// input');

$ data2 = json_decode($ data1);

有人可以帮忙吗?

回答

1

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

或者:

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

  2. 覆盖getBody:

    @Override 公共字节[] getBody()抛出AuthFailureError {
    返回params.getBytes(Charset.forName( “UTF-8”));

    }

0

感谢。我现在设法解决它。基本上我试图给这个JSON添加2个实体 - 一个String和一个类的另一个对象。字符串很好,但我直接使用“put”直接添加对象。我在做一个Gson.ToJson()之后,通过“放”它来解决这个问题。现在它很好:)