Json es un formato compacto de intercambio de datos soportado por librerías en Android SDK. En este post vamos a escribir un par de funciones para entender como recuperar un fichero json de la web de TusPerlas y así de paso avanzar el pŕoximo artículo de nuestra primera aplicación en Android.
El código completo (se asume que debes tener permisos de acceso a INTERNET para nuestro AndroidManifest.xml y es conveniente comprobar nuestra conexión antes.)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.StatusLine; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONArray; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class lecturaJson extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String lecturaJsonTusPerlas = lecturaJsonTusPerlas();
try { JSONArray jsonArray = new JSONArray(lecturaJsonTusPerlas); Log.i(lecturaJson.class.getName(), \"Número \" + jsonArray.length()); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); Log.i(lecturaJson.class.getName(), jsonObject.getString("texto")); // el campo lo recuperamos con el Log } } catch (Exception e) { e.printStackTrace(); } } public String lecturaJsonTusPerlas() {
StringBuilder builder = new StringBuilder(); HttpClient cliente = new DefaultHttpClient(); HttpGet peticionGet = new HttpGet("http://perlas.tunelko.com/json/get_data"); try { HttpResponse respuesta = cliente.execute(peticionGet); StatusLine estado = respuesta.getStatusLine(); int codigoEstado = estado.getStatusCode(); if (codigoEstado == 200) { HttpEntity entidad = respuesta.getEntity(); InputStream contenido = entidad.getContent(); BufferedReader lector = new BufferedReader( new InputStreamReader(contenido)); String line; while ((line = lector.readLine()) != null) { builder.append(line); } } else { Log.e(lecturaJson.class.toString(), "Algo ha salido mal"); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return builder.toString(); } }
Vincent
marzo 29, 2012Great, but why don’t you use AsyncTask for downloading data? If you don’t use it your app will shuts down when connection will last to long.