No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende Ingl茅s, Programaci贸n, AI, Ciberseguridad y m谩s a precio especial.

Antes: $249

Currency
$209
Suscr铆bete

Termina en:

2 D铆as
21 Hrs
55 Min
45 Seg

Mostrar favoritos

22/25
Recursos

Aportes 21

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Creo que es redundante tener el c贸digo que descarga las im谩genes, mas de una vez, lo mejor ser铆a meterlo en un m茅todo y que devuelva una imagen.

Estoy en 2022 haciendo el curso y todo los video estan desactualizados, y desordenados porque salte de BD a Programaci贸n y de ahi a otra herramientes y de nuevo a BD , seria bueno dar un orden y actualizar los cursos ya que en 2 a帽os que tiene los videos mas actuales hay muchos cambios y creo que hay gente en youtube que tiene actualizaciones y ordenado el curso.
Si me dicen recomendar铆as la plataforma digo no

Todav铆a no se ha cambiando el v铆deo, sigue estando repetido.

Asuuu que desorden, jeje, refactoricen urgente xd

Interesante ya veo porque fue necesario quitar las llaves en el proceso anterior, pero yo no hubiera copiado y pegado el c贸digo de ver gatos fuera implementado eso en una funci贸n a parte para que ambos procesos consuman esa funci贸n y el c贸digo sea mas f谩cil de mantener.

Obs:
Los atributos de Json tienen que ser el mismo en la clase que se crea.

Se aprende tambi茅n del desorden. Considero innecesario mostrar los favoritos de forma aleatoria. De resto bien

Don鈥檛 repeat yourself 馃槙

Todo genial y funciona perfectamente. El unico problema es el codigo xD, como muchos dicen ese copia y pega no va y es una filosofia en la programacion, aqui porque es didactivo y corto, pero en un proyecto seria horrible.

驴Tra vez el error grave de un llamado recursivo? C reo que hay que ponerle atenci贸n a este curso, es m谩s volverlo a hacer.

Este video ya esta como 鈥淕uardando datos en APIs publicas鈥

Excelente, ahora mediante estos ajustes podremos ver las im谩genes de gatos favorito que hayamos seleccionado. Muchas gracias instructor Santiago.

Solo dir茅 una palabra... PEEEENCAAAA! Una perdida de tiempo este curso. Saludos.

Tantas cosas que se pueden hacer con funciones para respetar el DRY

Con este if, los gatos dejan de estar en aleatorio鈥 Cabe destacar que tengo una public static int indexCat

        FavouriteCat[] catsFavorite = gson.fromJson(jsonData, FavouriteCat[].class);

        if (catsFavorite.length > 0){

            if (indexCat == catsFavorite.length) {
                indexCat = 0;
            }

            FavouriteCat favouriteCat = catsFavorite[indexCat];
            indexCat++;

Al igual que otros compis he puesto un for para recorrer los favotioss en vez de un numero aleatorio:

public static void showFavorites(String api_key) throws IOException {
		OkHttpClient client = new OkHttpClient();
		MediaType mediaType = MediaType.parse("application/json");

		Request request = new Request.Builder().url("https://api.thecatapi.com/v1/favourites").get()
				.addHeader("Content-Type", "application/json").addHeader("x-api-key", api_key).build();
		Response response = client.newCall(request).execute();
		System.out.println("Mostrando favoritos");

		String respJson = response.body().string();

		// Gson

		Gson gson = new Gson();

		CatsFav[] catsArray = gson.fromJson(respJson, CatsFav[].class);

		if (catsArray.length > 0) {
			for (CatsFav cat : catsArray) {

				// Crear una variable para almacenar la imagen
				Image img = null;

				try {
					// Crear un objeto URL a partir de la URL de la imagen en la respuesta JSON
					URL url = new URL(cat.getImage().getUrl());

					// Leer la imagen desde la URL
					img = ImageIO.read(url);

					// Crear un ImageIcon con la imagen obtenida
					ImageIcon catBackground = new ImageIcon(img);

					// Si el ancho de la imagen es mayor a 800, redimensionarla
					if (catBackground.getIconWidth() > 800) {
						Image background = catBackground.getImage();
						Image newBackground = background.getScaledInstance(800, 600, java.awt.Image.SCALE_SMOOTH);
						catBackground = new ImageIcon(newBackground);
					}

					String menu = "Opciones:\n" + "1- Ver otra imagen\n" + "2- Eliminar favorito\n" + "3- Volver";

					String[] botones = { "ver otra imagen", "eliminar de favoritos", "volver" };

					String idCat = cat.getId();

					String opcion = (String) JOptionPane.showInputDialog(null, menu, idCat,
							JOptionPane.INFORMATION_MESSAGE, catBackground, botones, botones[0]);

					int seleccion = -1;

					for (int i = 0; i < botones.length; i++) {
						if (opcion.equals(botones[i])) {
							seleccion = i;
						}
					}

					switch (seleccion) {
					case 0:
						//showFavorites(api_key);
						break;
					case 1:
						delFavoriteCat(cat);
						break;
					case 2:
						break;
					default:
						System.out.println("Opcion no valida");
						break;
					}
				} catch (Exception e) {
					// Imprimir un mensaje de error si hay alg煤n problema al formatear la imagen
					System.out.println("Error al formatear imagen");
				}

			}

		}

	}

para no tener codigo redundante en las descargas de las imagenes, utilic茅 el siguiente metodo:

pd: estoy utilizando The Dog API

public static ImageIcon redimensionarImagen(String url, int anchoMaximo, int altoMaximo) {
    try {
        URL imageUrl = new URL(url);
        HttpURLConnection http = (HttpURLConnection) imageUrl.openConnection();
        http.addRequestProperty("User-Agent", "");
        BufferedImage imagenOriginal = ImageIO.read(http.getInputStream());
        ImageIcon imagen = new ImageIcon(imagenOriginal);
        int anchoOriginal = imagen.getIconWidth();
        int altoOriginal = imagen.getIconHeight();
        if (anchoOriginal > anchoMaximo || altoOriginal > altoMaximo) {
            double proporcionAncho = (double) anchoMaximo / anchoOriginal;
            double proporcionAlto = (double) altoMaximo / altoOriginal;
            double proporcionRedimension = Math.min(proporcionAncho, proporcionAlto);
            int anchoRedimensionado = (int) (anchoOriginal * proporcionRedimension);
            int altoRedimensionado = (int) (altoOriginal * proporcionRedimension);
            Image imagenRedimensionada = imagenOriginal.getScaledInstance(anchoRedimensionado, altoRedimensionado, java.awt.Image.SCALE_SMOOTH);
            imagen = new ImageIcon(imagenRedimensionada);
        }
        return imagen;
    } catch (IOException e) {
        System.out.println(e);
        return null;
    }
}

Y para usar este m茅todo en elc贸digo, reemplaza el bloque de c贸digo que redimensiona la imagen actualmente con una llamada a este m茅todo

el bloque ser铆a

y para llamarlo

ImageIcon fondoPerrito = redimensionarImagen(perroFav.image.getUrl(), 800, 600);

Yo lo hice algo diferente para que muestre los favoritos en orden:

    public static void seeFavoriteCats() {
        try {
            OkHttpClient client = new OkHttpClient().newBuilder()
                    .build();
            MediaType mediaType = MediaType.parse("text/plain");
            RequestBody body = RequestBody.create(mediaType, "");
            Request request2 = new Request.Builder()
                    .url("https://api.thecatapi.com/v1/favourites")
                    .get()
                    .addHeader("x-api-key", APIKey.getApikey())
                    .build();
            Response response2 = client.newCall(request2).execute();
            String theJson2 = response2.body().string();

            Gson gson2 = new Gson();
            FavoriteCat[] favoriteCatsArray = gson2.fromJson(theJson2, FavoriteCat[].class);

            if (favoriteCatsArray.length > 0) {
                for (FavoriteCat currentCat : favoriteCatsArray) {
                    try {
                        URL url = new URL(currentCat.image.getUrl());
                        HttpURLConnection httpcon = (HttpURLConnection) url.openConnection();
                        httpcon.addRequestProperty("User-Agent", "");
                        BufferedImage bufferedImage = ImageIO.read(httpcon.getInputStream());
                        ImageIcon background = new ImageIcon(bufferedImage);

                        if (background.getIconWidth() > 800) {
                            Image modified = background.getImage().getScaledInstance(800, 600, Image.SCALE_SMOOTH);
                            background = new ImageIcon(modified);
                        }

                        String menu = "Options: \n" +
                                "1. Delete as favorite\n" +
                                "2. See next cat\n" +
                                "3. Go back";

                        String[] buttons = {"Delete as favorite", "See next cat", "Go back"};
                        String catID = String.valueOf(currentCat.image.getId());
                        String option = (String) JOptionPane.showInputDialog(null, menu, catID, JOptionPane.INFORMATION_MESSAGE, background, buttons, buttons[0]);

                        int selection = -1;

                        for (int i = 0; i < buttons.length; i++) {
                            if (option.equals(buttons[i])) {
                                selection = i;
                            }
                        }

                        switch (selection) {
                            case 0:
                                deleteCatAsFavorite();
                                break;
                            case 1: break;
                            default: System.exit(0);
                        }


                    } catch (IOException e) {
                        System.out.println(e);
                    }
                }

            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }

El problema de llamar el m茅todo recursivamente es que va a volver a llamar todos los datos a trav茅s de la api y a hacer muchas cosas de manera innecesaria.

Estudiantes, actualic茅 el proyecto en mi repositorio aplicando mejores pr谩cticas

Listo!

Prefer铆 solo listar los gatitos agregados a favoritos.

La idea seria despu茅s hacer refactor para aplicar POO y DRY