Cargando



Leyendo servicios web desde Android con JSON

Vamos conectarnos a un servidor, leeremos y parsearemos con JSON para que nos devuelva información y por último lo guardaremos en base de datos en nuestro dispositivo.


feb 06 2014 18:23
Profesional
feb 06 2014 19:19

android_json_j2ee.png


Vamos conectarnos a un servidor, leeremos y parsearemos con JSON para que nos devuelva información y por último lo guardaremos en base de datos en nuestro dispositivo.

Para los que no tienen un servidor donde realizar las pruebas podremos mediante nuestro dispositivo y un router wifi realizar pruebas sin problema.

Lo primero que haremos es abrir cualquier programa para editar el codigo Eclipse, Betbeans o el que mas nos guste. En un proyecto nuevo crearemos una nueva clase llamada JSONManager la cual va a tener el siguiente método static y public.




 public static JSONObject getJSONfromURL(String url){
	 InputStream is = null;
	 String result = "";
	 JSONObject json = null;
	 try{
	     HttpClient httpclient = new DefaultHttpClient();
		 HttpPost httppost = new HttpPost(url);
		 HttpResponse response = httpclient.execute(httppost);
		 HttpEntity entity = response.getEntity();
		 is = entity.getContent();
	 }catch(Exception e){}

	 try{
		 BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
		 StringBuilder sb = new StringBuilder();
		 String line = null;
		 while ((line = reader.readLine()) != null) {
			 sb.append(line + "\n");
		 }
		 is.close();
		 result=sb.toString();
	 } catch(Exception e){}

    try{
	   json = new JSONObject(result);
    }catch(JSONException e){}

    return json;
 }

El método se conectará a la URL que le indiquemos y tratará de leer y parsear la respuesta en un objeto JSONObject.
La primera parte del método abre la conexión http y obtiene la respuesta en un InputStream. La segunda parte, lee la respuesta y la parsea con un objeto BufferedReader para poder finalmente pasarla a un String.
Este String es necesario en la tercera parte para crear un nuevo objeto JSONObject que será lo que vamos a devolver finalmente.


Para la siguiente parte creamos una nueva clase, la cual voy a llamar JSONParserLibros. Esta clase se va a encargar de leer el servicio ayudado del método anterior y guardar en base de datos.
Veamos como funciona, por ejemplo en una base de datos de peliculas.


private Activity activity;
private JSONObject jObject;
private ProgressDialog progressDialog = null;
private Runnable runReadAndParseJSON;

public JSONParserPeliculas(Activity a){
 activity = a;
}

public void readAndParseJSONPeliculas() throws JSONException{
 runReadAndParseJSON = new Runnable() {
	 @Override
	 public void run() {
	 try{[/size][/font]
	    readJSONPeliculas();
	 } catch(Exception e){}[/size][/font]
	 }
 };
 Thread thread = new Thread(null, runReadAndParseJSON,"bgReadJSONPeliculas");
 thread.start();
 progressDialog = ProgressDialog.show(activity, "Descargando información", "Por favor espere",true);


private void readJSONPeliculas() throws JSONException{
 jObject = JSONManager.getJSONfromURL("http://208.87.120.105/android/service.peliculas.php");
 if(jObject != null)
		 parseJSONPeliculas(jObject.getJSONArray("peliculas"));
 activity.runOnUiThread(returnRes);
}

private void parseJSONPeliculas(JSONArray librosArray) throws JSONException{
 for(int i = 0; i < peliculasArray.length(); i++){
	 Pelicula l = new Peliculas();
    l.setIdPelicula(peliculaArray.getJSONObject(i).getInt("id"));
	 l.setTitulo(peliculaArray.getJSONObject(i).getString("pelicula"));
	 l.save(activity);
 }
}

private Runnable returnRes = new Runnable(){
 @Override
public void run() {
 progressDialog.dismiss();
 }
};


A continuación tenemos el método público que utilizaremos para llamar a nuestro servicio readAndParseJsonLibros. Este método crea un nuevo hilo de ejecución dentro del cual se va a hacer la llamada al servicio web, además se inicia una ventana de dialogo que avisará al usuario que se está haciendo una descarga.

Como podemos ver, he puesto una IP de una red local para hacer la llamada al servicio, esta corresponde al equipo donde he desarrollado el servicio web. En el momento de probar esto, si teneis un router wifi, deberemos activar la conexión wifi ennuestro dispositivo Android y conectarnos a nuestra red local para que podamos tener acceso al servicio. En caso de no tener wifi tenemos otras opciones como montar el servicio web en un servidor en internet, los datos se descargarán utilizando nuestra conexión 3G , o también lo podemos probar con el emulador de Android.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X