Как отправить объект JSON через HttpClient Request с Android? - PullRequest
14 голосов
/ 22 февраля 2012

Я хочу отправить текст JSON {} веб-службе и прочитать ответ. Как я могу сделать это с Android? Каковы шаги, такие как создание объекта запроса, настройка заголовков содержимого и т. Д.

Мой код здесь

public void postData(String result,JSONObject obj) {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpParams myParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(myParams, 10000);
    HttpConnectionParams.setSoTimeout(myParams, 10000);

    String json=obj.toString();

    try {

        HttpPost httppost = new HttpPost(result.toString());
        StringEntity se = new StringEntity(obj.toString()); 
        se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
        httppost.setEntity(se); 

        HttpResponse response = httpclient.execute(httppost);
        String temp = EntityUtils.toString(response.getEntity());
        Log.i("tag", temp);


    } catch (ClientProtocolException e) {

    } catch (IOException e) {
    }
}

какую ошибку я совершил, пожалуйста, исправьте меня, потому что это показывает мне неверную ошибку запроса но когда я публикую постер, он показывает мне статус «Успешно» 200 хорошо

Ответы [ 3 ]

13 голосов
/ 22 февраля 2012

Я делаю это с

httppost.setHeader("Content-type", "application/json");

Кроме того, new HttpPost() принимает URL-адрес веб-службы в качестве аргумента.

1 голос
/ 22 февраля 2012

Если это веб-служба, а не вызов RestAPI, вы можете получить файл WSDL с сервера и использовать генератор заглушек SOAP, чтобы выполнить всю работу по созданию объектов Request и сетевого кода для вас, например WSClient ++

Если вы хотите сделать это самостоятельно, то все становится немного сложнее. Android не поставляется с библиотекой SOAP. Тем не менее, вы можете скачать стороннюю библиотеку здесь: http://code.google.com/p/ksoap2-android/

Если вам нужна помощь в ее использовании, вам может пригодиться эта тема: Как вызвать .NET Webservice из Android с помощью KSOAP2?

Если это вызов REST-API, такой как POST или GET, чтобы быть более конкретным, то это очень просто Просто передайте объект JSON Formatted String в вашу функцию и используйте пакет org.json, чтобы проанализировать строку ответа для вас.

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

1 голос
/ 22 февраля 2012

В цикле try catch я сделал это:

         HttpPost post = new HttpPost(
         "https://www.placeyoururlhere.com");
         post.setHeader(HTTP.CONTENT_TYPE,"application/json" );
         List<NameValuePair> nameValuePairs = new
         ArrayList<NameValuePair>(1);
         nameValuePairs.add(new BasicNameValuePair("json", json));
         post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

         HttpClient client = new DefaultHttpClient();
         HttpResponse resp = client.execute(post);
         HttpEntity entity = resp.getEntity();

         response = EntityUtils.toString(entity);

Вы можете добавить свое nameValurPairs в зависимости от того, сколько полей у вас есть.Как правило, JSON может стать действительно огромным, и я предложу распаковать его, а затем отправить, но если ваш JSON достаточно мал и всегда того же размера, то вышеприведенное должно работать для вас.

...