¿Cómo enviar un objeto JSON a través de Solicitud con Android?

7 minutos de lectura

¿Como enviar un objeto JSON a traves de Solicitud con
desarrollador de Android

Quiero enviar el siguiente texto JSON

{"Email":"aaa@tbbb.com","Password":"123456"}

a un servicio web y lea la respuesta. Sé cómo leer JSON. El problema es que el objeto JSON anterior debe enviarse en un nombre de variable jason.

¿Cómo puedo hacer esto desde Android? ¿Cuáles son los pasos, como crear un objeto de solicitud, configurar encabezados de contenido, etc.

¿Como enviar un objeto JSON a traves de Solicitud con
Pappachan primigenio

Enviar un objeto json desde Android es fácil si usa Apache HTTP Client. Aquí hay un ejemplo de código sobre cómo hacerlo. Debe crear un nuevo subproceso para las actividades de la red para no bloquear el subproceso de la interfaz de usuario.

    protected void sendJson(final String email, final String pwd) {
        Thread t = new Thread() {

            public void run() {
                Looper.prepare(); //For Preparing Message Pool for the child Thread
                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("password", pwd);
                    StringEntity se = new StringEntity( json.toString());  
                    se.setContentType(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
                    }

                } catch(Exception e) {
                    e.printStackTrace();
                    createDialog("Error", "Cannot Estabilish Connection");
                }

                Looper.loop(); //Loop in the message queue
            }
        };

        t.start();      
    }

También podrías usar Google Gson para enviar y recuperar JSON.

  • Hola, ¿podría ser posible que el servidor requiera que configure un encabezado llamado JSON y coloque el contenido json en ese encabezado? Envío la url como HttpPost post=new HttpPost(“abc.com/xyz/usersgetuserdetails”); Pero dice error de solicitud no válida. El resto del código es el mismo. En segundo lugar, ¿qué significa json = header = new JSONObject(); Que esta pasando aqui

    – AndroidDev

    12 de junio de 2010 a las 12:46

  • No estoy seguro de qué tipo de solicitud espera el servidor. En cuanto a esto ‘ json = header = new JSONObject(); ‘ solo está creando 2 objetos json.

    – Primal Pappachan

    13 de junio de 2010 a las 1:22

  • @primpop: ¿hay alguna posibilidad de que pueda proporcionar un script php simple para acompañar esto? Intenté implementar su código, pero por mi vida no pude hacer que enviara nada más que NULL.

    – kubiej21

    2 de abril de 2012 a las 8:22

  • puede obtener el resultado de inputputstream (en el objeto aquí) como una cadena como esta StringWriter escritor = nuevo StringWriter (); IOUtils.copy(in, escritor, “UTF-8”); String theString = escritor.toString();

    – Yekmer Simsek

    31 de julio de 2012 a las 13:15

1646958846 705 ¿Como enviar un objeto JSON a traves de Solicitud con
dmazzoni

Android no tiene un código especial para enviar y recibir HTTP, puede usar el código estándar de Java. Recomiendo usar el cliente Apache HTTP, que viene con Android. Aquí hay un fragmento de código que usé para enviar un HTTP POST.

No entiendo qué tiene que ver enviar el objeto en una variable llamada “jason”. Si no está seguro de qué quiere exactamente el servidor, considere escribir un programa de prueba para enviar varias cadenas al servidor hasta que sepa en qué formato debe estar.

int TIMEOUT_MILLISEC = 10000;  // = 10 seconds
String postMessage="{}"; //HERE_YOUR_POST_STRING.
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
HttpClient client = new DefaultHttpClient(httpParams);

HttpPost request = new HttpPost(serverUrl);
request.setEntity(new ByteArrayEntity(
    postMessage.toString().getBytes("UTF8")));
HttpResponse response = client.execute(request);

  • ¿Es postMessage un objeto JSON?

    – AndroidDev

    12 de junio de 2010 a las 13:52

  • postMessage no está definido

    – rapaz

    9 de enero de 2014 a las 7:10

  • para que sirve el tiempo de espera

    – león789

    16 de enero de 2014 a las 21:52

  • ¿Qué sucede si pasa más de una cadena? como postMessage2.toString().getBytes(“UTF8”)

    – Mayur R. Amipara

    14 de febrero de 2015 a las 6:59

  • ¿Sugerencias para convertir una cadena POJO a Json?

    – tgkprog

    1 de enero de 2017 a las 10:39

1646958847 445 ¿Como enviar un objeto JSON a traves de Solicitud con
Sachin Gurnani

public void postData(String url,JSONObject obj) {
    // Create a new HttpClient and Post Header

    HttpParams myParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(myParams, 10000);
    HttpConnectionParams.setSoTimeout(myParams, 10000);
    HttpClient httpclient = new DefaultHttpClient(myParams );
    String json=obj.toString();

    try {

        HttpPost httppost = new HttpPost(url.toString());
        httppost.setHeader("Content-type", "application/json");

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

  • He publicado el objeto json en el servidor ASP.Net mvc. ¿Cómo puedo consultar la misma cadena json en el servidor ASP.Net?

    – Karthick

    22 de octubre de 2013 a las 7:01

HttpPost está en desuso por Android Api Nivel 22. Por lo tanto, use HttpUrlConnection para más

public static String makeRequest(String uri, String json) {
    HttpURLConnection urlConnection;
    String url;
    String data = json;
    String result = null;
    try {
        //Connect 
        urlConnection = (HttpURLConnection) ((new URL(uri).openConnection()));
        urlConnection.setDoOutput(true);
        urlConnection.setRequestProperty("Content-Type", "application/json");
        urlConnection.setRequestProperty("Accept", "application/json");
        urlConnection.setRequestMethod("POST");
        urlConnection.connect();

        //Write
        OutputStream outputStream = urlConnection.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
        writer.write(data);
        writer.close();
        outputStream.close();

        //Read
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));

        String line = null;
        StringBuilder sb = new StringBuilder();

        while ((line = bufferedReader.readLine()) != null) {
            sb.append(line);
        }

        bufferedReader.close();
        result = sb.toString();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return result;
}

Hay una biblioteca sorprendentemente agradable para Android HTTP disponible en el siguiente enlace:

http://loopj.com/android-async-http/

Las solicitudes simples son muy fáciles:

AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(String response) {
        System.out.println(response);
    }
});

Para enviar JSON (crédito a `voidberg’ en https://github.com/loopj/android-async-http/issues/125):

// params is a JSONObject
StringEntity se = null;
try {
    se = new StringEntity(params.toString());
} catch (UnsupportedEncodingException e) {
    // handle exceptions properly!
}
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));

client.post(null, "www.example.com/objects", se, "application/json", responseHandler);

Todo es asincrónico, funciona bien con Android y es seguro llamar desde el subproceso de la interfaz de usuario. El controlador de respuesta se ejecutará en el mismo subproceso desde el que lo creó (normalmente, su subproceso de interfaz de usuario). Incluso tiene un resonseHandler incorporado para JSON, pero prefiero usar google gson.

  • ¿Sabes el SDK mínimo en el que se ejecuta?

    – Esko918

    19 mayo 2015 a las 18:36

  • Me sorprendería si tuviera un mínimo ya que no es GUI. ¿Por qué no probarlo y publicar sus hallazgos?

    – Alex

    20 mayo 2015 a las 18:14

  • Bueno, decidí usar las bibliotecas nativas en su lugar. Hay más información sobre eso y ya que soy bastante nuevo en Android. Realmente soy un desarrollador de iOS. Es mejor ya que estoy leyendo todos los documentos en lugar de simplemente enchufar y jugar con el código de otra persona. aunque gracias

    – Esko918

    21 de mayo de 2015 a las 19:09

¿Como enviar un objeto JSON a traves de Solicitud con
Sanjeet A

Ahora desde el HttpClient está en desuso, el código de trabajo actual es usar el HttpUrlConnection para crear la conexión y escribir y leer de la conexión. Pero preferí usar el Voleo. Esta biblioteca es de Android AOSP. Me pareció muy fácil de usar para hacer JsonObjectRequest o JsonArrayRequest

  • ¿Sabes el SDK mínimo en el que se ejecuta?

    – Esko918

    19 mayo 2015 a las 18:36

  • Me sorprendería si tuviera un mínimo ya que no es GUI. ¿Por qué no probarlo y publicar sus hallazgos?

    – Alex

    20 mayo 2015 a las 18:14

  • Bueno, decidí usar las bibliotecas nativas en su lugar. Hay más información sobre eso y ya que soy bastante nuevo en Android. Realmente soy un desarrollador de iOS. Es mejor ya que estoy leyendo todos los documentos en lugar de simplemente enchufar y jugar con el código de otra persona. aunque gracias

    – Esko918

    21 de mayo de 2015 a las 19:09

1646958847 840 ¿Como enviar un objeto JSON a traves de Solicitud con
Dave Ranjan

Nada podría ser más simple que esto. Usar OkHttpLibrary

Crea tu json

JSONObject requestObject = new JSONObject();
requestObject.put("Email", email);
requestObject.put("Password", password);

y enviarlo así.

OkHttpClient client = new OkHttpClient();

RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
            .addHeader("Content-Type","application/json")
            .url(url)
            .post(requestObject.toString())
            .build();

okhttp3.Response response = client.newCall(request).execute();

  • Se votó a favor por apuntar a okhttp, que es una biblioteca útil, pero el código dado no ayuda mucho. Por ejemplo, ¿cuáles son los argumentos pasados ​​a RequestBody.create()? Vea este enlace para más detalles: vogella.com/tutorials/JavaLibrary-OkHttp/article.html

    – Aficionado

    15 de junio de 2017 a las 12:23


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad