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

Error al ejecutar Omdb

Hola buena tarde, quisiera una asesoría por favor. Hasta este punto, antes de hacer el Record e instalar las librerias necesarias para la conexion, el programa iba bien. Pero al momento de ejecutar (justo después de implementar el Record), todo mi programa marco excepciones en tres de las clases de Modelo. Ya lo re-hice todo de nuevo, descargue el programa del Profesor (el cual si anda bien). Pero al mio no se que le sucedió. Ayuda por favor.

Me dice que necesita crearse un constructor de Superclase en las clases hijos. Pero nada mas no me funciona. Me siento frustrada :-:!

4 respuestas

¡Hola Adoración, espero que estés bien!

Duda: ¿Podría mostrar los errores y tu código por favor?

Entiendo que estás experimentando problemas al ejecutar tu programa después de implementar el Record en tu proyecto. Parece que el error que estás viendo se refiere a la necesidad de crear un constructor de superclase en las clases hijas.

Dado que estás consumiendo la API de OMDB y trabajando con la biblioteca Gson, es posible que el problema esté relacionado con la forma en que estás utilizando las clases y la serialización de los datos.

Es importante asegurarse de que estás utilizando correctamente el constructor de la superclase en las clases hijas. Asegúrate de que estás pasando los parámetros necesarios al constructor de la superclase en las clases que extienden de ella.

Además, es posible que necesites revisar la forma en que estás utilizando la biblioteca Gson para deserializar los datos JSON. Asegúrate de que estás mapeando correctamente los campos del JSON a las propiedades de tus clases.

Si has descargado el programa del profesor y funciona correctamente, puede ser útil comparar tu implementación con la del profesor para identificar las diferencias y encontrar dónde puede estar el problema.

Espero que estas sugerencias te ayuden a resolver el problema. Recuerda que la resolución de errores en programación a menudo implica revisar cuidadosamente el código y probar diferentes enfoques hasta encontrar la solución adecuada.

Espero haber ayudado y ¡buenos estudios!

package Principales;

import funcionesExtra.CalculadoraDeTiempo; import funcionesExtra.FiltroSugerencias; import modelos.Episodios; import modelos.Pelicula; import modelos.Serie; import modelos.Titulo; //Aqui no me reconoce la importacion, ni tampoco la de Titulo Omdb import modelos.TituloOmdb;

public class Principal { public static void main(String[] args) {

    //SE INSTANCIA (CREA) MI PROPIO OBJETO, EN BASE A LA CLASE PREVIAMENTE HECHA "pelicula", LA CUAL CONTIENE LOS DATOS QUE SE VAN A LLAMAR  AQUI EN ESTE CODIGO//

//************************ PRIMER OBJETO **********/

    Pelicula filme=new Pelicula(); //Se inicializa y crea el objeto.
    filme.setNombreSP("El Padrino");
    filme.duracion=180;
    filme.setFechaLanzamiento(1970);

//************************ SEGUNDO OBJETO **********/

    Pelicula filmeDos= new Pelicula();
    //      filmeDos.nombrePelicula="The Thing";
    filmeDos.setNombreSP("The Thing");
    filmeDos.setFechaLanzamiento(1983);
    filmeDos.duracion=120;

//****************** LLAMANDO INDIVIDUALMENTE A LOS OBJETOS *********/

    filme.fichaTecnica(); //El Padrino

// System.out.println("Mi com.ONE.Peliculas.Pelicula es: "+ filme.setNombrePelicula(), // System.out.println("Fecha de lanzamiento:" + filme.setFechaLanzamiento(); // System.out.println("Duracion:" + filme.duracion); Pelicula prom=new Pelicula(); filme.suma(10); filme.suma(8.8); //Aca se da acceso para poner las evaluaciones filme.suma(7.9); filme.suma(8.0); System.out.println("Suma total de evaluaciones" + filme.getPonderacion()); System.out.println("El total de usuarios que evaluaron es: " + filme.getPersonas()); System.out.println("El promedio de esta pelicula es:" + filme.promedio());

    System.out.println("\n*******************************\n");

//****************** LLAMANDO CON UN METODO (Metodo de la clase "com.ONE.Peliculas.Pelicula" de nombre: "fichaTecnica") *********/

    filmeDos.fichaTecnica(); //Se reduce a una linea al ,momento de imprimir. THE THING

//******************************** SE HACE EL PROMEDIO DE LA PELICULA EVALUADA/ Pelicula promedia=new Pelicula(); filmeDos.suma(7.5); filmeDos.suma(10); filmeDos.suma(9.8);

// System.out.println("La suma de las evaluaciones es:" + filmeDos.ponderacion); System.out.println("La suma de las evaluaciones es:" + filmeDos.getPonderacion()); // System.out.println("Total de personas que evaluaron:" + filmeDos.personas); /* Al haber cambiado el modo publico a privado, de (PERSONAS), cambia el codigo de llamado al siguiente: getPersonas */

    System.out.println("Total de personas que evaluaron:" + filmeDos.getPersonas());

    System.out.println("El promedio de esta pelicula es: "+ filmeDos.promedio());

    System.out.println("\n*******************************\n");

//**********SE CREA OBJETO DE CLASE SERIE ********************** /

    Serie serie=new Serie(); //objeto creado
    serie.setNombreSP("Law and Order SVU");
    serie.setFechaLanzamiento(1999);
    serie.setTemporadas(25);
    serie.setEpisodioTemp(22);
    serie.setMinEpisodio(60);
    serie.fichaSerie();
    System.out.println("La duracion total en minutos de la serie es "+ serie.getDuracion());

    Serie serieII=new Serie();
    serieII.setNombreSP("Los Soprano");
    serieII.setFechaLanzamiento(1999);
    serie.setTemporadas(4);
    serieII.setEpisodioTemp(19);
    serieII.fichaSerie();

    //**********SE CREA OBJETO P/CALCULADORA TIEMPO **************** /

    //Se hace la suma de minutos: El Padrino + Ley y Orden
    CalculadoraDeTiempo calculadora=new CalculadoraDeTiempo();
    calculadora.incluye(filme);
    calculadora.incluye(serieII);
    calculadora.incluye(serie);
    System.out.println("El tiempo total que requieres para ver el contenido que elegiste es de: "+ calculadora.getTiempoTotal() + "\n minutos");

//**********SE CREA OBJETO DE CLASE FILTRO ********************** /

    FiltroSugerencias filtroSugerencia= new FiltroSugerencias();
    filtroSugerencia.filtra(filme); //filtra se encuentra en la clase FiltroSugerencia
    filtroSugerencia.filtra(filmeDos);

// SE CREA OBJETO DE CLASE EPISODIO************ /

    Episodios episodio=new Episodios();
    episodio.setNombreSP("The Fallen");
    episodio.setCapitulo(18);
    episodio.setSerie(serieII);
    episodio.setTotalViews(0);

    filtroSugerencia.filtra(episodio);

}

public static class PrincipalConBusqueda {
}

}
package modelos;

public class Serie extends Titulo{ //Aca marca excepcion en esta linea. Dice que no hay un constructor por default en modelos.Titulo (el padre)

private int temporadas;
private int episodioTemp;
private int minEpisodio;

// /*********** SE GENERAN LOS SETTER Y O GETTERS **********/

public void setTemporadas(int temporadas) {
    this.temporadas = temporadas;
}

public void setEpisodioTemp(int episodioTemp) {
    this.episodioTemp = episodioTemp;
}

public void setMinEpisodio(int minEpisodio) {
    this.minEpisodio = minEpisodio;
}

@Override
public int getDuracion() {
    return minEpisodio*temporadas * episodioTemp ;
}


public int getEstrellas() {
    return 0;
}

@Override
public String toString() {return "Serie:" +this.getNombreSP()+ this.getFechaLanzamiento();
}

}

/** ERROR EN CONSOLA***/

java: no suitable constructor found for Titulo(no arguments) constructor modelos.Titulo.Titulo(modelos.TituloOmdb) is not applicable (actual and formal argument lists differ in length) constructor modelos.Titulo.Titulo(java.lang.String,int) is not applicable (actual and formal argument lists differ in length)

package modelos; import com.google.gson.annotations.SerializedName;

public class Titulo{ @SerializedName("Title") private String nombreSP; @SerializedName("Year") private int fechaLanzamiento; public int duracion; private int personas; private double ponderacion; private int totalPondera;

public Titulo(TituloOmdb tituOmdb) {
    this.nombreSP=tituOmdb.title();
    this.fechaLanzamiento=Integer.valueOf(tituOmdb.year());
    this.duracion=Integer.valueOf(tituOmdb.runtime());
}

public Titulo(String nombreSP, int fechaDeLanzamiento) {
}

/******************** METODO PARA RECIBIR FECHA LANZAMIENTO ********************/

// public void setFechaLanzamiento(int fechaLanzamiento){ this.fechaLanzamiento = fechaLanzamiento;}

public int getFechaLanzamiento() {
    return fechaLanzamiento;
}

public void setFechaLanzamiento(int fechaLanzamiento) {
    this.fechaLanzamiento = fechaLanzamiento;
}

/******************** METODO PARA RECIBIR INFO  ********************/

/*Ya que es una instancia privada, no se puede  recibir informacion externa, es por ello que igualmente se hace uso de un metodo (GETTER) para asi obtener los datos*/
public void setNombreSP(String nombrePelicula) {
    this.nombreSP = nombrePelicula;
}

public String getNombreSP() {
    return nombreSP;
}

/******************** GETTER PARA DEVOLVER PERSONAS ********************/

/* Al haberse convertido en una instancia privada, el usuario no podra acceder directamente al metodo "PERSONAS", por lo que unicamente devolvera el resultado por medio del nuevo metodo creado.

Esto modificara el codigo de llamado en la clase (PRINCIPAL)*/

public int getPersonas() {
    return personas;
}


/******************** METODO PARA DEVOLVER PONDERACION ********************/

public double getPonderacion() {
    return ponderacion;
}

/******************** METODO PARA DEVOLVER DURACION EN MINUTOS ********************/

public int getDuracion() {
    return duracion;
}

/****************************** METODOS ****************************/

public void fichaTecnica() // METODO CON TODOS LOS DATOS DE ARRIBA(reduce lineas de codigo al llamarla en la Clase Principal)
{
    System.out.println("Titulo: "+ nombreSP);
    System.out.println("Fecha de lanzamiento:" + fechaLanzamiento);
    System.out.println("Duracion:" + duracion);

}
public void fichaSerie(){
    System.out.println("Titulo Serie:" + nombreSP);
    System.out.println("Fecha de estreno:" + fechaLanzamiento);
}

public void suma(double pondera){
    ponderacion= ponderacion + pondera;
    personas++;
}

public double promedio(){
    return ponderacion/personas;
}



// SE CREA UN TO STRING, PARA QUE SE PUEDA SOBREESCRIBIR (REEMPLAZAR) LA INFORMACION DE LA API con este CODIGO (alt+ insert)

public String toString() {
    return //"Titulo{" +
            "nombreSP='" + nombreSP + '\'' +
                    ", fechaLanzamiento=" + fechaLanzamiento +
                    ", duracion=" + duracion /*+*/
            /*'}'*/;
}

} /Listo, perdon por tanto Spam, pero considere necesario mostrar un poquito mas para dar una idea de mi problema. Muchas gracias por el primer comentario y claro, me pondre a revisar. Igual estoy revisando lo de los Mapeos. Reitero mi agradecimiento/