2012-02-22 17 views
14

Deseo enviar el texto JSON {} a un servicio web y leer la respuesta. ¿Cómo puedo hacer esto desde Android? ¿Cuáles son los pasos tales como la creación de peticiones de objetos, establecer cabeceras de contenido, etc.¿Cómo enviar un objeto JSON sobre HttpClient Request con Android?

Mi código es aquí

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) { 
    } 
} 

lo error que he hecho PLZ me corregir porque me muestra un error de solicitud incorrecta pero cuando i insertas en el cartel que me muestra el estado de éxito como 200 OK

+0

Intente configurar este tipo 'entity.setContentType (" application/json; charset = UTF-8 "); \t \t \t \t entity.setContentEncoding (nueva BasicHeader (HTTP.CONTENT_TYPE, \t \t \t \t \t \t "application/json; charset = UTF-8")); ' – MKJParekh

+0

@Soni Sin su trabajo no está bien para mí, lo intenté pero me muestra el error de solicitud incorrecta –

+0

@Soni, el único error que se ha cometido es no configurar Header como este en la siguiente publicación httppost.setHeader ("Content-type", "application/json"); –

Respuesta

13

lo hago con

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

Además, el new HttpPost() toma la URL del servicio web como argumento.

+0

Gracias funciona para mí –

1

En el bucle intento de captura, lo hice:

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

Puede añadir sus nameValurPairs según el número de campos que tiene. Por lo general, el JSON puede llegar a ser realmente enorme, y luego sugeriré que lo descomprima y lo envíe, pero si su JSON es bastante pequeño y siempre del mismo tamaño, lo anterior debería funcionar para usted.

1

Si se trata de un servicio web y no de una llamada RestAPI, puede obtener el archivo WSDL del servidor y usar un generador SOAP Stub para hacer todo el trabajo de crear los objetos Request y el código de red para usted, por ejemplo WSClient ++

Si desea hacerlo usted mismo, entonces las cosas se ponen un poco complicadas. Android no viene con la biblioteca SOAP. Sin embargo, se puede descargar la biblioteca tercera parte aquí: http://code.google.com/p/ksoap2-android/

Si necesita ayuda para usarlo, pueden ser útiles en este tema: How to call a .NET Webservice from Android using KSOAP2?

Si es una REST API de llamadas como POST o GET para ser más específicos entonces es muy simple Simplemente pase un objeto String con formato JSON en su función y use el paquete org.json para analizar la cadena de respuesta por usted.

Espero que esto ayude.

+0

excelente post me ayuda –

Cuestiones relacionadas