Android,

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