FechaVersiónDescripción
18/02/20252.0.0Conexiones http, recogida de datos y parseo json

pokeapi_256

 

Lucha de Pokémon.

Para el desarrollo de esta actividad partiremos de la información que ya tenemos de la explicación del funcionamiento de la APIrest de Pokémon.

Vamos a ampliar y realizar una pequeña aplicación que nos ayude a realizar un juego en el que luchen 2 Pokémon.

 

1. Clase Pokémon

Esta clase nos va a permitir almacenar información de los Pokémon. No pretendemos almacenar toda la información de los mismos, pero si una parte de ella que nos será de gran utilidad para trabajar con estos.

Tanto esta clase como las restantes las generarás en el paquete pojo. Por defecto se te proporcionará un proyecto base con este.

Partimos de la base que de los Pokémon que descarguemos con a través de la llamada GET de la APIRest que nos proporciona generaremos un objeto con la siguiente información:

 

Como puedes observar los atributos de los Pokémon son privados, de tal manera que sólo podrás ser accedidos desde fuera de la clase a través de getters y setters.

Los nombres está en inglés ya que hacen referencia a los tipos de datos de los objeto JSON con los que se va a trabajar.

Se recomienda el uso de Mozilla Firefox porque implementa un parseo de JSON que nos permitirá ver de una manera estructurada el contenido.

Accedemos al api y realizamos un get: https://pokeapi.co/api/v2/pokemon/ que por defecto nos va a devolver 20 Pokémon:

Ejercicio_Pokemon_1

Este fichero Json tiene varias etiquetas:

Accedemos por ejemplo a la url de bulbasaur: https://pokeapi.co/api/v2/pokemon/1/

Podemos acceder, y más sencillo, así: https://pokeapi.co/api/v2/pokemon/bulbasaur/

Ejercicio_Pokemon_2

Como se puede observar disponemos de mucha información de la clase Pokémon:

Como se puede observar esta información es directa, es decir, después de una descarga inicial de X Pokemon, realizamos otra nueva conexión con la url y obtenemos esta información.

Nosotros como atributo tenemos type ... pero, nos aparecen types 😒 veamos con nuestro ejemplo de bulbasaur:

Ejercicio_Pokemon_3

Dentro de types, tenemos type. Vemos que bulbasaur puede adoptar dos formas de Pokémon, de tipo hierba, grass o de tipo veneno, poison. Nosotros por defecto nos vamos a quedar con una única forma, la primera, es decir, la 0.

 

Continuamos con el resto de atributos de Pokémon.

Esto que quiere decir, pues que nuestra clase Pokémon se va a formar de datos directos y de objetos que de otras clases almacenados en Listas.

 

2. Clase Stat y StatDetail (Estadísticas)

Esta clase contendrá la siguiente información:

Dentro de esta observamos que nos hará falta otra clase, cuidado esta otra son los detalles de las estadísticas, se relaciona con las estadísticas.

Sólo tienen un nombre.

No haremos uso luego realmente de las mismas, pero nos van a servir para parsear las estructuras JSON.

Veamos el ejemplo de bulbasaur:

Ejercicio_Pokemon_4

 

3. Clase Move (Movimiento)

Esta clase nos va a permitir representar los movimientos de los Pokémon. Contendrá los siguientes atributos:

De los movimientos nos quedaremos con un máximo de 10 movimientos. Más que nada para no saturar las peticiones http.

Continuamos con nuestro ejemplo de Bulbasaur y sus movimientos:

Ejercicio_Pokemon_5

Ahora accedemos a la url, bien con las que nos proporciona ("https://pokeapi.co/api/v2/move/13/") o bien de manera más sencilla, con el name ("https://pokeapi.co/api/v2/move/razor-wind/")

Y obtenemos el resto de la información:

Ejercicio_Pokemon_6

 

De aquí obtendremos:

4. Clase Ability (Habilidad)

La clase Ability va a disponer de los siguientes atributos:

 

Nos quedaremos con la primera. De esta cogemos el nombre (name)

Ejercicio_Pokemon_7

efect lo obtendremos accediendo de nuevo a la url que nos proporciona:

Nos quedaremos igualmente con el parametro efect de la primera entrada, la 0:

Ejercicio_Pokemon_8

 

5. Clase Crie (Llorar)

En esta clase dispondremos de los siguientes atributos:

En esta clase almacenaremos la url para poder descargar el último sonido y el legacy.

 

Lo encontraremos dentro de cries:

Ejercicio_Pokemon_9

 

6. Clase Form (Forma)

En esta clase almacenaremos las diferentes formas que tiene el Pokémon. Realmente son las imágenes de este:

Para acceder a estos, deberemos obtener la información de forms. En este tenemos la url que nos llevará a las formas del Pokémon:

Ejercicio_Pokemon_10

Una vez estamos en esta, obtendremos las diferentes formas de la URL. Las cogeremos dentro del array sprites:

Ejercicio_Pokemon_11

De aquí nos quedaremos con el back_default, el back_shiny, front_default y front_shiny.

 

7. ¿Qué se nos proporciona ya para trabajar?

Para facilitar el trabajo se nos proporcionará esta estructura:

Ejercicio_Pokemon_12

 

8. ApiPokemon

Para trabajar con los Json vamos a hacer uso de un proyecto que se proporciona ya preconfigurado. Es un proyecto de Maven, en el pom.xml ya va la dependencia de Maven, sólo tendrás que refrescarlo por si acaso.

Ejercicio_Pokemon_13

La clase ApiPokemon dispondrá de la siguiente estructura:

  1. El método getConexion, encargado de realizar la conexión y devolver un objeto de tipo HttpURLConnection:

     

  2. El método getPokemonData, que recibirá como parámetro una url, internamente llamará a getConexion, y devolverá un String con todo lo obtenido de la Api de Pokémon:

     

  3. El método recogePokemons, es el que tendrás que implementar. Recibe la url con la que trabajaremos y el número de pokemons a descargar. Parte del código se te proporcionará. Hay otra parte que deberás implementar. Fíjate en los comentarios, pues en estos se indica como podemos acceder a los datos.

 

9. LuchaPokemon

 

Esta clase se va a encargar de implementar una lucha entre 2 Pokémon. No debes implementarla, se proporciona ya:

 

Entrega la actividad y haz que puedan luchar 2 Pokémon aleatoriamente.