¿Cómo enviar un objeto JSON a través de Request con Android?
Quiero enviar el siguiente texto JSON
{"Email":"[email protected]","Password":"123456"}
a un servicio web y lea la respuesta. Sé leer JSON. El problema es que el objeto JSON anterior debe enviarse con 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.?
Enviar un objeto json desde Android es fácil si utiliza el cliente HTTP Apache. Aquí hay un ejemplo de código sobre cómo hacerlo. Debe crear un nuevo hilo para las actividades de la red para no bloquear el hilo 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 puedes usar Google Gson para enviar y recuperar JSON.
Android no tiene un código especial para enviar y recibir HTTP, puedes usar código Java estándar. Recomiendo usar el cliente HTTP Apache, que viene con Android. Aquí hay un fragmento de código que utilicé para enviar una POST HTTP.
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);
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) {
}
}