Intereting Posts
Отправка SMS на реальное тестовое устройство (не эмулятор) через экземпляр DDMS или эмулятора Google analytics easytracker вызывает исключение Java-соединения Получить Android API уровня телефона в настоящее время работает мое приложение Глобальная декларация переменной в android GetStyledAttributes, аннотированный с помощью @StyleableRes. Подавлять предупреждения Сделайте снимок экрана SurfaceView Android CollapsingToolbarLayout Название фона Ошибка приложения не установлена ​​на Android Android Google Analytics – подключение к службе не выполнено Доля Facebook – Отсутствующие тексты Как выполнять только код на определенном уровне API Как настроить инъекцию зависимостей с помощью кинжала для вещей, отличных от действий и фрагментов? Android для Невозможно создать экземпляр приложения java.lang.ClassNotFoundException: Детский фрагмент автоматически уничтожается Размер шрифта TextView в приложении Android изменяется при изменении размера шрифта из собственных настроек

Как сделать вызов httpPost с json закодированным телом?

Я использую следующий код, чтобы сделать вызов httpPost, но он возвращает мне 400 плохих запросов, когда я пытаюсь дать следующие параметры в «простом клиенте для отдыха» в chrome extension, он отлично работает, кто-нибудь подскажет мне, какую ошибку я здесь делаю?

Простой клиент для отдыха Я ввел следующее:

URL: http://jon2012.com/api/register Метод: заголовки POST: нет заголовков, поскольку они не требуются. Данные: {«email»: «test@example.com», «first_name»: «Name»} Введите описание изображения здесь

Код Android:

HttpClient client = new DefaultHttpClient(); HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit HttpResponse response; JSONObject json = new JSONObject(); try{ HttpPost post = new HttpPost(url); json.put("email", email); json.put("first_name", name); StringEntity se = new StringEntity( "JSON: " + json.toString()); se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); post.setEntity(se); response = client.execute(post); /*Checking response */ /*if(response!=null){ InputStream in = response.getEntity().getContent(); //Get the data in the entity */ int statusCode = response.getStatusLine().getStatusCode(); } catch(Exception e){ e.printStackTrace(); // createDialog("Error", "Cannot Estabilish Connection"); } 

Любая помощь будет назначена

Solutions Collecting From Web of "Как сделать вызов httpPost с json закодированным телом?"

Я делал общую ошибку, когда ошибка json-объекта была неправильной. Например, я отправлял его как first_name, email..etc..where, когда правильная последовательность была электронной почтой, first_name

Мой код

 boolean result = false; HttpClient hc = new DefaultHttpClient(); String message; HttpPost p = new HttpPost(url); JSONObject object = new JSONObject(); try { object.put("updates", updates); object.put("mobile", mobile); object.put("last_name", lastname); object.put("first_name", firstname); object.put("email", email); } catch (Exception ex) { } try { message = object.toString(); p.setEntity(new StringEntity(message, "UTF8")); p.setHeader("Content-type", "application/json"); HttpResponse resp = hc.execute(p); if (resp != null) { if (resp.getStatusLine().getStatusCode() == 204) result = true; } Log.d("Status line", "" + resp.getStatusLine().getStatusCode()); } catch (Exception e) { e.printStackTrace(); } return result; 

Вот мой код для вызова служб отдыха с Http POST и JSON:

(Обратите внимание, что я использую AndroidHttpClient, который в основном является DefaultHttpClient с некоторыми предустановленными атрибутами и проектом GSON для JSON marshalling)

Класс для обработки сообщений:

 public class NetworkComm extends AsyncTask<String, Integer, String> { // Log tag private static final String TAG = "NetworkComm"; private AndroidHttpClient hc; private HttpContext localContext; private TaskResponseListener listener; private int reqType; private String message; private String url; private Object extra; public NetworkComm(AndroidHttpClient hc, HttpContext localContext, TaskResponseListener listener, int reqType, String message, String url, Object extra){ super(); this.hc = hc; this.localContext = localContext; this.listener = listener; this.reqType = reqType; this.message = message; this.url = url; this.extra = extra; } public AndroidHttpClient getHc() { return hc; } public void setHc(AndroidHttpClient hc) { this.hc = hc; } public HttpContext getLocalContext() { return localContext; } public void setLocalContext(HttpContext localContext) { this.localContext = localContext; } public void start(){ this.execute(message); } protected void onPreExecute() { //Don't do anything here } protected String doInBackground(String... req) { Log.d(TAG, "Message to send: "+req[0]); HttpPost p = new HttpPost(url); try{ p.setEntity(new StringEntity(req[0], "UTF8")); }catch(Exception e){ e.printStackTrace(); } p.setHeader("Content-type", "application/json"); String response = ""; try{ HttpResponse resp = hc.execute(p, localContext); InputStream is = resp.getEntity().getContent(); response = convertStreamToString(is); Log.d("Response", "Response is " + response); Log.d("Status line", ""+resp.getStatusLine().getStatusCode()); } catch (Exception e){ e.printStackTrace(); } return response; } protected void onProgressUpdate(Integer... progress) { // dont handle this yet } @Override protected void onCancelled() { super.onCancelled(); } protected void onPostExecute(String result) { Log.d("task", "task finished"); listener.onTaskResponse(reqType, result, extra); } public interface TaskResponseListener{ public void onTaskResponse(int type, String response, Object extra); } private String convertStreamToString(InputStream is) throws IOException { if (is != null) { Writer writer = new StringWriter(); char[] buffer = new char[1024]; try { Reader reader = new BufferedReader( new InputStreamReader(is, "UTF-8")); int n; while ((n = reader.read(buffer)) != -1) { writer.write(buffer, 0, n); } } finally { is.close(); } return writer.toString(); } else { return ""; } } } 

Применение:

 Gson g = new Gson(); SomeContent content = new SomeContent("Stuff", 4); String message = g.toJson(content); NetworkComm task = new NetworkComm(hc, localContext, listener, 0, message, url, ""); task.start(); 

Надеюсь, что это помогает.