Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

Haga lo que hicimos en aula

ErrorEnConversionDeDuracionException.java

package com.aluracursos.screenmatch.Excepcion;

public class ErrorEnConversionDeDuracionException extends RuntimeException {
    private String mensaje;

    public ErrorEnConversionDeDuracionException(String mensaje) {
        this.mensaje = mensaje;
    }

    public String getMensaje() {
        return this.mensaje;
    }
}

Titulo.java

package com.aluracursos.screenmatch.modelos;

import com.aluracursos.screenmatch.Excepcion.ErrorEnConversionDeDuracionException;
import com.google.gson.annotations.SerializedName;

public class Titulo implements Comparable<Titulo>{
    @SerializedName("Title")
    private String nombre;
    @SerializedName("Year")
    private int fechaDeLanzamiento;
    private int duracionEnMinutos;
    private boolean incluidoEnElPlan;
    private double sumaDeLasEvaluaciones;
    private int totalDelasEvaluaciones;

    public Titulo(String nombre, int fechaDeLanzamiento) {
        this.nombre = nombre;
        this.fechaDeLanzamiento = fechaDeLanzamiento;
    }

    public Titulo(TituloOmdb miTituloOmdb) {
        this.nombre = miTituloOmdb.title();
        this.fechaDeLanzamiento = Integer.valueOf(miTituloOmdb.year());
        if (miTituloOmdb.runtime().contains("N/A")){
            throw new ErrorEnConversionDeDuracionException("No pude convertir la duracion," +
                    "porque contiene un N/A");
        }
        this.duracionEnMinutos = Integer.valueOf(miTituloOmdb.runtime().substring(0,3).replace(" ", ""));
    }

    public String getNombre() {
        return nombre;
    }

    public int getFechaDeLanzamiento() {
        return fechaDeLanzamiento;
    }

    public int getDuracionEnMinutos() {
        return duracionEnMinutos;
    }

    public boolean isIncluidoEnElPlan() {
        return incluidoEnElPlan;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public void setFechaDeLanzamiento(int fechaDeLanzamiento) {
        this.fechaDeLanzamiento = fechaDeLanzamiento;
    }

    public void setDuracionEnMinutos(int duracionEnMinutos) {
        this.duracionEnMinutos = duracionEnMinutos;
    }

    public void setIncluidoEnElPlan(boolean incluidoEnElPlan) {
        this.incluidoEnElPlan = incluidoEnElPlan;
    }

    public int getTotalDelasEvaluaciones(){
        return totalDelasEvaluaciones;
    }

    public void muestraFichaTecnica(){
        System.out.println("El nombre de la película es: " + nombre);
        System.out.println("Su fecha de lanzamiento es: " + fechaDeLanzamiento);
        System.out.println("Duración en minutos: "+ getDuracionEnMinutos());
    }

    public void evalua(double nota){
        sumaDeLasEvaluaciones += nota;
        totalDelasEvaluaciones++;
    }

    public double calculaMedia(){
        return sumaDeLasEvaluaciones / totalDelasEvaluaciones;
    }

    @Override
    public int compareTo(Titulo otroTitulo) {
        return this.getNombre().compareTo(otroTitulo.getNombre());

    }

    @Override
    public String toString() {
        return "nombre='" + nombre + '\'' +
                ", fechaDeLanzamiento=" + fechaDeLanzamiento+
                ", Duración="+duracionEnMinutos;
    }
}
2 respuestas

Segunda parte
PrincipalConBusqueda.java

package com.aluracursos.screenmatch.principal;

import com.aluracursos.screenmatch.Excepcion.ErrorEnConversionDeDuracionException;
import com.aluracursos.screenmatch.modelos.Titulo;
import com.aluracursos.screenmatch.modelos.TituloOmdb;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;

public class PrincipalConBusqueda {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner lectura = new Scanner(System.in);
        System.out.println("Escriba el nombre de la pelicula: ");
        var busqueda = lectura.nextLine();

        String direccion = "https://www.omdbapi.com/?t="+
                busqueda.replace( " ", "+")+
                "&apikey=b058208c";

        try{
            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(direccion))
                    .build();

            HttpResponse<String> response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());

            String json = response.body();
            System.out.println(json);

            Gson gson = new GsonBuilder()
                    .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                    .create();
            TituloOmdb miTituloOmdb = gson.fromJson(json, TituloOmdb.class);
            System.out.println(miTituloOmdb);

            Titulo miTitulo = new Titulo(miTituloOmdb);
            System.out.println("Titulo ya convertido: " + miTitulo);
        }catch (NumberFormatException e){
            System.out.println("Ocurrio un error: ");
            System.out.println(e.getMessage());
        }catch (IllegalArgumentException e){
            System.out.println("Error en la URI, verifique la dirección");
        } catch (ErrorEnConversionDeDuracionException e) {
            System.out.println(e.getMensaje());
        }
        System.out.println("Finalizo la ejecucion del programa!");

    }
}

Hola Sebastian,

Veo que estás trabajando en una actividad que implica manejar excepciones al consumir una API. Parece que ya has implementado la clase ErrorEnConversionDeDuracionException y estás utilizando esta excepción en el constructor de la clase Titulo para manejar casos donde la duración no puede ser convertida debido a un valor "N/A".

A continuación, te doy algunos consejos y ejemplos prácticos que podrían ayudarte:

  1. Revisar el paquete y la estructura de clases: Asegúrate de que el paquete com.aluracursos.screenmatch.Excepcion esté correctamente nombrado y que la clase ErrorEnConversionDeDuracionException esté en el lugar correcto. Según el contexto, debería ser com.alura.screenmatch.excepcion.

  2. Validación de la duración: En el constructor de Titulo, ya estás manejando el caso en que la duración es "N/A". Asegúrate de que el substring que estás utilizando para obtener la duración sea correcto. Podrías usar miTituloOmdb.runtime().replaceAll("\\D+", "") para eliminar cualquier carácter no numérico antes de convertirlo a entero.

  3. Manejo de excepciones en el método principal: En la clase PrincipalConBusqueda, asegúrate de manejar todas las posibles excepciones que puedan surgir, como IOException o InterruptedException, además de las que ya estás manejando. Esto asegurará que tu programa no se detenga inesperadamente.

  4. Pruebas y depuración: Asegúrate de probar tu aplicación con diferentes entradas, incluyendo títulos que contengan espacios y aquellos que podrían no existir en la base de datos de OMDb, para verificar que todas las excepciones se manejan adecuadamente.

Espero que estos consejos te sean útiles para completar la actividad. ¡Espero haber ayudado y buenos estudios!