2015-06-20 33 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()之後,通過「放」它來解決這個問題。現在它很好:)