I'm writing code for an Android application that is supposed to take data, package it as Json and post it to a web server, that in turn is supposed to respond with json.
Using a GET request works fine, but for some reason using POST all data seems to get stripped and the server does not receive anything.
Here's a snippet of the code:
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;   I think I have followed the general guidelines on how to create the parameters and post them, but apparently not.
Any help or pointers to where I can find a solution, are very welcome at this point (after spending a few hours realizing no post data was ever sent). The real server is running Wicket on Tomcat, but I've also tested it out on a simple PHP page, with no difference.
You can actually send it as JSON the following way:
// Build the JSON object to pass parameters JSONObject jsonObj = new JSONObject(); jsonObj.put("username", username); jsonObj.put("apikey", apikey); // Create the POST object and add the parameters HttpPost httpPost = new HttpPost(url); StringEntity entity = new StringEntity(jsonObj.toString(), HTTP.UTF_8); entity.setContentType("application/json"); httpPost.setEntity(entity); HttpClient client = new DefaultHttpClient(); HttpResponse response = client.execute(httpPost); 
                        have you tried doing it without the JSON object and just passed two basicnamevaluepairs? also, it might have something to do with your serversettings
Update: this is a piece of code I use:
InputStream is = null; ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();     nameValuePairs.add(new BasicNameValuePair("lastupdate", lastupdate));   try {         HttpClient httpclient = new DefaultHttpClient();         HttpPost httppost = new HttpPost(connection);         httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));         HttpResponse response = httpclient.execute(httppost);         HttpEntity entity = response.getEntity();         is = entity.getContent();         Log.d("HTTP", "HTTP: OK");     } catch (Exception e) {         Log.e("HTTP", "Error in http connection " + e.toString());     } 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With