Intercambio de datos con JSON en Android SDK

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();
	}
}


1 comentario

  1. Vincent

    Great, 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.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.