Qual é a maneira mais eficiente de o Android chamar chamadas de API da Web HTTP que retornam uma resposta JSON?
Eu sou do tipo perfeccionista, eu já tenho chamadas de API da web funcionando bem com a API do Google Places (apenas como um exemplo), mas eu sinto que às vezes é lento ou talvez eu não esteja fazendo certo. Alguns blogs estão dizendo que eu deveria usar o AndroidHttpClient, mas não estou, devo?
A API da web chama estou usando return json e não os executo no thread da interface do usuário, portanto, usando o AsyncTask (o AsyncTask é a maneira mais eficiente de executar no thread de segundo plano ou devo usar outra coisa?)
Por favor, veja meu código e me diga como poderia ser mais eficiente de qualquer maneira
public static class NearbySearchRequest extends AsyncTask<String, Void, JSONObject>
{
Exception mException = null;
@Override
protected void onPreExecute()
{
super.onPreExecute();
this.mException = null;
}
@Override
protected JSONObject doInBackground(String... params)
{
StringBuilder urlString = new StringBuilder();
urlString.append("https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
urlString.append("key=").append(Constants.GOOGLE_SIMPLE_API_KEY);
urlString.append("&location=").append(params[0]);
urlString.append("&sensor=").append("true");
urlString.append("&language=").append("en-GB");
urlString.append("&name=").append(params[1]);
urlString.append("&rankby=").append("distance");
LogHelper.Log(urlString.toString());
HttpURLConnection urlConnection = null;
URL url = null;
JSONObject object = null;
try
{
url = new URL(urlString.toString());
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
urlConnection.connect();
InputStream inStream = null;
inStream = urlConnection.getInputStream();
BufferedReader bReader = new BufferedReader(new InputStreamReader(inStream));
String temp, response = "";
while ((temp = bReader.readLine()) != null)
response += temp;
bReader.close();
inStream.close();
urlConnection.disconnect();
object = (JSONObject) new JSONTokener(response).nextValue();
}
catch (Exception e)
{
this.mException = e;
}
return (object);
}
@Override
protected void onPostExecute(JSONObject result)
{
super.onPostExecute(result);
if (this.mException != null)
ErrorHelper.report(this.mException, "Error # NearbySearchRequest");
}
}