2012-02-04 62 views
0

我在嘗試POST JSON數組時遇到問題。Android POST JSON數組到服務器

對於我的Android代碼,我做通JSON陣列到服務器:

interests = // JSONArray of JSONObjects 
final ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(); 
params.add(new BasicNameValuePair(PARAM_USERNAME, username)); 
params.add(new BasicNameValuePair(PARAM_INTERESTS, interests.toString())); 

HttpEntity entity = new UrlEncodedFormEntity(params); 
final HttpPost post = new HttpPost(UPDATE_INTERESTS_URI); 
post.setEntity(entity); 

// POST data to server 

但是,當我從服務器讀取它使用:

$interests = $_POST["interests"]; 
echo $interets 

它看起來像[{\"a\":\"1\"},{\"b\":\"2\"}]代替[{"a":"1"},{"b":"2"}]。第一個不能正確解碼,第二個可以正常工作。

那麼,爲什麼它不工作?

編輯:
當我看到在Android上就上崗前,在JSONArray.toString()看起來像[{"a":"1"},{"b":"2"}]

回答

2

不知道關於Android,但看起來像magic quotes -feature PHP是添加這些斜線,如果是這樣的話,你可以使用這個服務器 - 上方:

$interests = $_POST["interests"]; 
if (get_magic_quotes_gpc()) { 
    $interests = stripslashes($interests); 
} 
echo $interests; 
+0

這解決了我的問題,謝謝 – Hank 2012-02-04 22:31:53

0

你可以嘗試使用:

StringEntity params = new StringEntity("your_Data");   

,而不是你的UrlEncodedEntity。

1

做到這樣:

JSONObject paramInput = new JSONObject(); 
paramInput.put(PARAM_USERNAME, username); 
paramInput.put(INTERESTS, interests.toString()); 
StringEntity entity = new StringEntity(paramInput.toString(), HTTP.UTF_8); 
+0

但我會不得不改變任何東西在服務器端? – Hank 2012-02-04 22:17:15

+0

我不這麼認爲。 – waqaslam 2012-02-04 22:18:08