Programación multimedia y dispositivos móviles. Android y JSON

Documentos relacionados
Construcciones del Lenguaje Java

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Tutorial de uso de Android Asynchronous HTTP Client (LOOPJ) Programación en Internet

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFAZ CLONEABLE DE JAVA. MÉTODO CLONE() PARA CLONAR OBJETOS. (CU00912C)

INTERFACE LIST DEL API JAVA. CLASES ARRAYLIST, LINKEDLIST, STACK, VECTOR. EJEMPLO CON ARRAYLIST. (CU00920C)

Examen Teórico Convocatoria de Junio de 2012

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

INTERFACE ITERATOR DEL API JAVA. MÉTODO REMOVE PARA BORRAR OBJETOS EN COLECCIONES. EJERCICIOS Y EJEMPLO RESUELTO. (CU00919C)

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

PROGRAMACIÓN GENÉRICA

Práctica 5. Fecha límite de entrega: viernes, 14 de diciembre

- Compilar y ejecutar programas en Java - Estructura básica de una clase - El comando javac - El comando java - Introducción al IDE de desarrollo

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)

Examen escrito de Programación 1

[Column(Name = "FirstName", DbType = "varchar(10)")] public string FirstName { get; set; }

PRÁCTICA 4: DISEÑO DE TIPOS Versión: 1.0.1

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Parte I: Programación en un lenguaje orientado a objetos

Crear listas personalizadas en Android

Tema 3: Genericidad en Java. Tema 3: Genericidad en Java. Objetivos y Bibliografía. Modelos de Datos Genéricos

Creación de plugins para Apache Cordova. Parte JavaScript. Javier de Silóniz Sandino

Programación orientada a objetos

LA CLASE VECTOR DEL API JAVA. MÉTODOS TRIMTOSIZE Y ENSURECAPACITY EJEMPLO Y EJERCICIOS RESUELTOS. (CU00922C)

Ingeniería del Software Separación entre Presentación y Lógica del Negocio

Estructuras de control selectivas

Curso de Java Introducción a la Programación I

Unidad Didáctica 19. Tratamientos Secuenciales Generalizados II. Versión 1.0.0

JAVA. L.I Gerardo Benavides Pérez

Serialización de datos en C# en Binario, Soap y Xml

INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11

Programación Orientada a Objetos Curso 2014/2015. Práctica 11

PRÁCTICA 14: CRITERIOS DE COMPARACIÓN Y ORDERING Versión: public class ComparadorVueloFecha implements Comparator<Vuelo>{

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Para crear un arreglo de cualquier tipo de elementos la sintaxis es:

ArrayList en Java. Los principales métodos para trabajar con los ArrayList son los siguientes:

7. Otras sentencias Sentencia break. 84 A. García-Beltrán y J.M. Arranz

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Curso de programación en Android. 19/Junio/2012 Ramón Alcarria

Programa Formativo. Código: Curso: Programación con JAVA 8 SE Standard Edition Modalidad: ONLINE Duración: 120h.

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Programación de sistemas Listas enlazadas

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

Objetivos. El alumno empleará el concepto de excepción en la programación orientada a objetos para el manejo de errores de ejecución.

Serialización de Objetos en Java. Dra. Maricela Bravo

Elementos léxicos del lenguaje de programación Java

Entiendo los métodos de Java equals y hashcode

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4

PROGRAMACIÓN EN JAVA

Tema 6 Patrones de Diseño. Programación Orientada a Objetos Curso 2010/2011

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Examen escrito de Programación 1

Excepciones. Excepciones

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

INDICE Prologo 1 Recorrido rápido de java 2 Clases y objetos 3 Extensión de clases

2. Estructura de un programa en Java

Definición. Mónica E. García García Feb 07

Conceptos Básicos. Programación Orientada a Objetos 2

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Objetivos. Índice. 1. Paquetes

INICIACIÓN A LA PROGRAMACIÓN LENGUAJE JAVA con BlueJ

Tema: Grafos en C#. Objetivos Específicos. Materiales y Equipo. Introducción Teórica. Programación IV. Guía 7

Concurso: Cuánto sabes de JAVA?

Resumen Clase Anterior Ejercicio Clase 16 Archivos Ejemplo. ING1310 Introducción a la Computación. Archivos

APELLIDOS:... NOMBRE:... GRUPO:... NÚMERO DE EXPEDIENTE:...

CÓMO CREAR CONSTRUCTORES E INICIALIZAR OBJETOS EN JAVA. EJERCICIO EJEMPLO RESUELTO. (CU00639B)

k. Son métodos de la clases y respectivamente, que analiza un para devolver un entero con

TEMA 10: Lo que NO hay que hacer

FUNDAMENTOS DE PROGRAMACIÓN Curso: 2013/14 EXAMEN PARA ALUMNOS PRESENTADOS AL PRIMER PARCIAL PRIMERA PARTE. EJERCICIO 1 Cuestiones (1 punto)

A3F. Polimorfismo. Carlos Fontela

Curso librerias Web 2.0. Aplicaciones Web Serv Inf UA JSON

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Tema 5 Java 8. Programación Orientada a Objetos Curso 2016/2017

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Tema 2. El lenguaje de programación Java (Parte 1)

Agenda. Guía en 5 pasos para el diseño orientado a objetos

Soluciones. boolean pruebaiteraseriegeometrica () { Serie s= new SerieGeometrica (1, 2); return (s.iterator() instanceof IteraSerieGeometrica); }

Colecciones. Nadjet Bouayad-Agha Programación 2007

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

Tutorial 1: Desarrollo de un plugin

Índice INTRODUCCIÓN...11 CAPÍTULO 1. SELECCIÓN DE ARQUITECTURAS Y HERRAMIENTAS DE PROGRAMACIÓN...13

Introducción a Java 10/02/2011. Tokens. Juan Manuel Fernández Peña Curso Rev Tokens. Tokens

Métodos CON valor de retorno

Listas enlazadas. Programación de Sistemas

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

18. Interfaces Declaración de una interfaz

Formato para prácticas de laboratorio

Bloque II. Elementos del lenguaje de programación Java

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++;

Tema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Examen. Programación II

Tema 14: Excepciones

Desarrollo de Aplicaciones para Android

Formato para prácticas de laboratorio

GUÍA DE ESTILO EN JAVA

Manejo de Excepciones

Examen de Prácticas de Programación Ingeniería Informática

Transcripción:

Programación multimedia y dispositivos móviles Android y JSON

JSON JSON (JavaScript Object Notation) es un formato para el intercambios de datos, básicamente JSON describe los datos con una sintaxis dedicada que se usa para identificar y gestionar los datos. Nació como una alternativa a XML y, una de las mayores ventajas que tiene su uso es que puede ser leído por cualquier lenguaje de programación. Por lo tanto, puede ser usado para el intercambio de información entre distintas tecnologías. Además debido a su naturaleza y al ser más compacto suele ser mucho más rápido trabajar con JSON que con XML.

de código JSON Si tuviéramos un listado de frutas, por ejemplo: Frutas: Manzana - 6 unidades Pera - 8 unidades Naranja - 10 unidades Esto se traduciría en JSON de la siguiente manera: { "frutas": [ { "nombre_fruta":"manzana", "cantidad":6, { "nombre_fruta":"pera", "cantidad":8, { "nombre_fruta":"naranja", "cantidad":10 ]

JSONObject Para leer en java de un archivo JSON debemos tratar el contenido del archivo como un String. Partiendo de un String que contiene el código JSON utilizaremos la clase JSONObject La clase JsonObject representa un objeto JSON inmutable (una colección desordenada de cero o más pares de nombre / valor). También proporciona un mapa no modificable de las asignaciones de nombre / valor del objeto JSON. El valor de un JsonObject puede ser JsonObject, JsonArray, JsonString, JsonNumber, JsonValue.TRUE, JsonValue.FALSE, JsonValue.NULL.

JSONArray La clase JSONArray representa un array JSONObjects inmutable (una secuencia ordenada de cero o más valores). También proporciona una lista no modificable de los valores del array. El valor de un JSONArray puede ser JsonObject, JsonArray, JsonString, JsonNumber, JsonValue.TRUE, JsonValue.FALSE, JsonValue.NULL. Si sabemos que el valor de un nombre es una lista podemos obtener el array por medio del método optjsonarray de la clase JSONObject, pasándole como parámetro dicho nombre

En el ejemplo de la fruta: //Creamos un objeto JSON a partir de la cadena JSONObject object = new JSONObject(cadenaJson); //cogemos la lista dentro de la etiqueta "frutas" JSONArray json_array = object.optjsonarray("frutas"); JSONObject objjson = null; for (int i = 0; i < json_array.length(); i++) { objjson = json_array.getjsonobject(i); nombre = objjson.getstring("nombre_fruta"); unidades = objjson.getint("cantidad");

Para manejar los objetos de la lista deberíamos crear una clase Fruta: public class Fruta { public String nombre; public int unidades; public Fruta(JSONObject objetojson) { nombre = objetojson.getstring("nombre_fruta"); unidades = objetojson.getint("cantidad"); De manera que al manejar el array: Fruta f = null; for (int i = 0; i < json_array.length(); i++) { f = new Fruta(json_array.getJSONObject(i));

En el proyecto llamado App Web Service creamos un paquete llamado model y en este paquete creamos la clase Pokemon: public class Pokemon { public String url; public String nombre; public Pokemon(JSONObject objetojson) { url = objetojson.getstring("url"); nombre = objetojson.getint("name"); public String tostring() { return " url : " + url + "\n name : " + name + "\n---------------------------------------\n";

En el método onpostexecute del MainActivity.java: protected void onpostexecute(void v) { String salida = ""; JSONObject jsonr = null; try { jsonr = new JSONObject(res); JSONArray jsonmainnode = jsonr.optjsonarray("results"); Pokemon poke = null; for (int i=0; i < jsonmainnode.length(); i++) { poke = new Pokemos(jsonMainNode.getJSONObject(i)); salida += poke.tostring(); tvres.settext(salida); catch (JSONException e) {

Retrofit Retrofit también nos va a permitir parsear automáticamente la respuesta de un web service a un POJO (Plan Old Java Objects). En nuestro caso nos vamos a centrar en JSON Para poder convertir JSON a POJO con Retrofit tendremos que incluir en las dependencias las librerías de Gson de Google y la integración Gson de Retrofit. compile 'com.google.code.gson:gson:2.8.2' compile 'com.squareup.retrofit2:converter-gson:2.3.0'

jsonschema2pojo Para crear los POJOs necesarios podemos hacerlo utilizando la herramienta jsonschema2pojo. Pega la respuesta JSON en la caja de entrada. Selecciona el tipo de fuente de JSON, estilo de anotación de Gson, desmarca Permitir propiedades adicionales y cambia el nombre de la clase. Pulsa el botón Preview y copia el código.

jsonschema2pojo import com.google.gson.annotations.expose; import com.google.gson.annotations.serializedname; public class Fruta { @SerializedName("nombre_fruta") @Expose private String nombrefruta; @SerializedName("cantidad") @Expose private Integer cantidad; La anotación @SerializedName es necesaria para que Gson mapee las llaves JSON a campos de objeto Java. La anotación @Expose indica que el miembro de la clase debería ser expuesto para serialización o deserialización JSON.

jsonschema2pojo public String getnombrefruta() { return nombrefruta; public void setnombrefruta(string nombrefruta) { this.nombrefruta = nombrefruta; public Integer getcantidad() { return cantidad; public void setcantidad(integer cantidad) { this.cantidad = cantidad;

En el proyecto llamado App WS Retrofit. Incluimos las dependencias en el build.gradle(module:app) compile 'com.google.code.gson:gson:2.8.2' compile 'com.squareup.retrofit2:converter-gson:2.3.0'

Creamos un paquete llamado retrofitdata y creamos la clase Pokemon public class Pokemon { @SerializedName("url") @Expose private String url; @SerializedName("name") @Expose private String name; // métodos get y set public String tostring() { return " url : " + url + "\n nombre : " + name + "\n------------------------------------\n";

Y la clase PokemonRes public class PokemonRes { @SerializedName("count") @Expose private Integer count; @SerializedName("previous") @Expose private Object previous; @SerializedName("results") @Expose private List<Pokemon> results = null; @SerializedName("next") @Expose private String next; // métodos get y set

En el paquete retrofitutils, en el interfaz APIRestService cambiamos el tipo de dato que maneja el servicio. public interface APIRestService { public static final String BASE_URL = "https://pokeapi.co/api/v2/"; @GET("pokemon/") Call<PokemonRes> obtenerpokemon();

Y en la clase RetrofitClient cambiamos el conversor public class RetrofitClient { private static Retrofit retrofit = null; public static Retrofit getclient(string baseurl) { if (retrofit==null) { retrofit = new Retrofit.Builder().baseUrl(baseUrl).addConverterFactory(GsonConverterFactory.create()).build(); return retrofit;

En el MainActivity.java, el método consumirws quedaría de la siguiente manera: public void consumirws(view v) { Retrofit r = RetrofitClient.getClient(APIRestService.BASE_URL); APIRestService ars = r.create(apirestservice.class); Call<PokemonRes> call = ars.obtenerpokemon(); call.enqueue(new Callback<PokemonRes>() { String res; TextView tvres = (TextView)findViewById(R.id.tvResultado);

@Override public void onresponse(call<pokemonres> call, Response<PokemonRes> response) { if (!response.issuccessful()) { Log.i(TAG, "Error" + response.code()); else { PokemonRes pokeres = response.body(); for (Pokemon poke: pokeres.getresults()) { res += poke.tostring(); tvres.settext(res); ); @Override public void onfailure(call<pokemonres> call, Throwable t){ Log.e("error", t.tostring());