Intereting Posts
AppBarLayout.setExpanded (логическая, истинная) странная анимация в библиотеке поддержки 23.1.1 Как переопределить класс в проекте библиотеки Android? Работа с ограничением размера текстуры Android Android: выровнять исходный снизу + нижний край Как удалить границу только с одной стороны элемента? Избегайте перезагрузки с помощью asynctask при изменении ориентации в android Как создать каталог во внутреннем хранилище после установки приложения Android? Android – перехват и передача всех событий касания Как установить отображение TimePicker с форматом 24h Почему Eclipse / adb не обнаружит мое устройство Samsung Galaxy Tab на моем Mac? Защитить доступ к URL-адресу API через хэш в приложении Android Насколько плох Android SoundPool? Какая альтернатива использовать? Андроид – круглый прямоугольник для макетов Как отслеживать изменение состояния SIM-карты Android удаление файла из внутреннего хранилища

Использование HttpClient и HttpPost в Android с параметрами post

Я пишу код для приложения для Android, которое должно брать данные, упаковывать его как Json и отправлять его на веб-сервер, который, в свою очередь, должен отвечать json.

Использование запроса 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; 

Я думаю, что я следовал общим рекомендациям о том, как создавать параметры и публиковать их, но, видимо, нет.

Любая помощь или указатели на то, где я могу найти решение, очень приветствуются на этом этапе (потратив несколько часов на то, чтобы не отправлять никаких почтовых данных). На реальном сервере работает Wicket на Tomcat, но я также проверил его на простой странице PHP, без разницы.

Solutions Collecting From Web of "Использование HttpClient и HttpPost в Android с параметрами post"

Вы пытались сделать это без объекта JSON и просто передали два базовых значения? Кроме того, это может иметь какое-то отношение к вашим серверам

Обновление: это часть кода, который я использую:

 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()); } 

Вы можете отправить его как JSON следующим образом:

 // 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); 

Я только что проверил, и у меня есть тот же код, что и вы, и он работает perferctly. Единственное различие заключается в том, как я заполняю свой список для параметров:

Я использую параметры: ArrayList<BasicNameValuePair> params

И заполнить его следующим образом:

  params.add(new BasicNameValuePair("apikey", apikey); 

Я не использую JSONObject для отправки параметров в веб-службы.

Вы обязаны использовать JSONObject?