我寫的代碼是應該採取數據的Android應用程序,將其打包爲JSON並將其發佈到Web服務器,這反過來應該用JSON迴應。使用的HttpClient和HttpPost在Android中使用POST參數
使用GET請求工作正常,但使用POST所有數據由於某種原因似乎得到剝離和服務器沒有收到任何東西。
這裏的代碼片段:
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 5000);
HttpConnectionParams.setSoTimeout(params, 5000);
DefaultHttpClient httpClient = new DefaultHttpClient(params);
BasicCookieStore cookieStore = new BasicCookieStore();
httpClient.setCookieStore(cookieStore);
String uri = JSON_ADDRESS;
String result = "";
String username = "user";
String apikey = "something";
String contentType = "application/json";
JSONObject jsonObj = new JSONObject();
try {
jsonObj.put("username", username);
jsonObj.put("apikey", apikey);
} catch (JSONException e) {
Log.e(TAG, "JSONException: " + e);
}
HttpPost httpPost = new HttpPost(uri);
List<NameValuePair> postParams = new ArrayList<NameValuePair>();
postParams.add(new BasicNameValuePair("json", jsonObj.toString()));
HttpGet httpGet = null;
try {
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParams);
entity.setContentEncoding(HTTP.UTF_8);
entity.setContentType("application/json");
httpPost.setEntity(entity);
httpPost.setHeader("Content-Type", contentType);
httpPost.setHeader("Accept", contentType);
} catch (UnsupportedEncodingException e) {
Log.e(TAG, "UnsupportedEncodingException: " + e);
}
try {
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
if (httpEntity != null) {
InputStream is = httpEntity.getContent();
result = StringUtils.convertStreamToString(is);
Log.i(TAG, "Result: " + result);
}
} catch (ClientProtocolException e) {
Log.e(TAG, "ClientProtocolException: " + e);
} catch (IOException e) {
Log.e(TAG, "IOException: " + e);
}
return result;
我想我已經按照如何創建參數,並張貼他們的一般準則,但顯然不是。
任何幫助或指針在那裏我能找到一個解決方案,都非常歡迎在這一點上(花幾個小時實現無後的數據後,曾發送)。真正的服務器在Tomcat上運行Wicket,但我也在一個簡單的PHP頁面上測試過,沒有任何區別。
**更新與解決方案_(在這種特殊情況下的工作至少對我來說)_:**我刪除了所有方法調用集'Content-Type',現在它可以工作。在這種情況下唯一允許的內容類型方法調用是'httpPost.setHeader(「Accept」,contentType);'。 – Patrick 2011-05-17 14:17:45
這是因爲UrlEncodedFormEntity將內容類型設置爲application/x-www-form-urlencoded。如果您將內容類型更改爲其他內容(例如application/json),服務器將無法解析您的請求參數。 – redochka 2011-11-19 09:43:19