Nesta resposta, estou usando um exemplo postado por Justin Grammens .
Sobre JSON
JSON significa JavaScript Object Notation. Em JavaScript, as propriedades podem ser referenciadas assim object1.name
e assim object['name'];
. O exemplo do artigo usa esse bit de JSON.
As Partes
Um objeto de fã com e-mail como chave e foo@bar.com como valor
{
fan:
{
email : 'foo@bar.com'
}
}
Portanto, o equivalente do objeto seria fan.email;
ou fan['email'];
. Ambos teriam o mesmo valor de 'foo@bar.com'
.
Sobre a solicitação HttpClient
O seguinte é o que nosso autor usou para fazer uma solicitação HttpClient . Não tenho a pretensão de ser um especialista em tudo isso, então, se alguém tiver uma maneira melhor de redigir um pouco da terminologia, fique à vontade.
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
Se você não estiver familiarizado com a Map
estrutura de dados, dê uma olhada na referência do mapa Java . Resumindo, um mapa é semelhante a um dicionário ou 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;
}
Sinta-se à vontade para comentar qualquer dúvida que surgir sobre este post ou se eu não tiver deixado algo claro ou se não toquei em algo que você ainda está confuso ... etc, o que realmente vier na sua cabeça.
(Vou retirar se Justin Grammens não aprovar. Mas, se não, agradeço a Justin por ser legal quanto a isso.)
Atualizar
Acabei de receber um comentário sobre como usar o código e percebi que havia um erro no tipo de retorno. A assinatura do método foi configurada para retornar uma string, mas neste caso não estava retornando nada. Alterei a assinatura para HttpResponse e irei encaminhá-lo a este link em Getting Response Body of HttpResponse,
a variável de caminho é o url e atualizei para corrigir um erro no código.