En esta respuesta, estoy usando un ejemplo publicado por Justin Grammens .
Sobre JSON
JSON son las siglas de JavaScript Object Notation. En JavaScript, las propiedades pueden ser referenciadas tanto así object1.name
como así object['name'];
. El ejemplo del artículo usa este bit de JSON.
El
objeto de ventilador Parts A con el correo electrónico como clave y foo@bar.com como valor
{
fan:
{
email : 'foo@bar.com'
}
}
Entonces, el objeto equivalente sería fan.email;
o fan['email'];
. Ambos tendrían el mismo valor de 'foo@bar.com'
.
Acerca de la solicitud de HttpClient
Lo siguiente es lo que usó nuestro autor para realizar una solicitud HttpClient . No pretendo ser un experto en todo esto, así que si alguien tiene una mejor manera de expresar algo de la terminología, no dude en hacerlo.
public static HttpResponse makeRequest(String path, Map params) throws Exception
{
//instantiates httpclient to make request
DefaultHttpClient httpclient = new DefaultHttpClient();
//url with the post data
HttpPost httpost = new HttpPost(path);
//convert parameters into JSON object
JSONObject holder = getJsonObjectFromMap(params);
//passes the results to a string builder/entity
StringEntity se = new StringEntity(holder.toString());
//sets the post request as the resulting string
httpost.setEntity(se);
//sets a request header so the page receving the request
//will know what to do with it
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
//Handles what is returned from the page
ResponseHandler responseHandler = new BasicResponseHandler();
return httpclient.execute(httpost, responseHandler);
}
Mapa
Si no está familiarizado con la Map
estructura de datos, consulte la referencia de Java Map . En resumen, un mapa es similar a un diccionario o un hash.
private static JSONObject getJsonObjectFromMap(Map params) throws JSONException {
//all the passed parameters from the post request
//iterator used to loop through all the parameters
//passed in the post request
Iterator iter = params.entrySet().iterator();
//Stores JSON
JSONObject holder = new JSONObject();
//using the earlier example your first entry would get email
//and the inner while would get the value which would be 'foo@bar.com'
//{ fan: { email : 'foo@bar.com' } }
//While there is another entry
while (iter.hasNext())
{
//gets an entry in the params
Map.Entry pairs = (Map.Entry)iter.next();
//creates a key for Map
String key = (String)pairs.getKey();
//Create a new map
Map m = (Map)pairs.getValue();
//object for storing Json
JSONObject data = new JSONObject();
//gets the value
Iterator iter2 = m.entrySet().iterator();
while (iter2.hasNext())
{
Map.Entry pairs2 = (Map.Entry)iter2.next();
data.put((String)pairs2.getKey(), (String)pairs2.getValue());
}
//puts email and 'foo@bar.com' together in map
holder.put(key, data);
}
return holder;
}
Siéntase libre de comentar cualquier pregunta que surja sobre esta publicación o si no he dejado algo claro o si no he tocado algo sobre lo que todavía está confundido ... etc., lo que sea que realmente se le ocurra.
(Eliminaré si Justin Grammens no lo aprueba. Pero si no, gracias a Justin por ser genial al respecto).
Actualizar
Acabo de recibir un comentario sobre cómo usar el código y me di cuenta de que había un error en el tipo de devolución. La firma del método se configuró para devolver una cadena, pero en este caso no devolvía nada. Cambié la firma a HttpResponse y lo referiré a este enlace sobre Cómo obtener el cuerpo de respuesta de HttpResponse,
la variable de ruta es la URL y la actualicé para corregir un error en el código.