Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Erro na execução no metodo "buscarEpisodioPorSerie()"

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeNão sei oq está faltando

4 respostas

Oi por favor, mande o teu código completo pode ser em forma de repositório

https://github.com/BirdMelo/ConsultaDB Desculpa a demora, tive que resolver outras coisas.

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2023-11-28T08:57:19.935-03:00 ERROR 6500 --- [           main] o.s.boot.SpringApplication               : Application run failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:774) ~[spring-boot-3.1.1.jar:3.1.1]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:755) ~[spring-boot-3.1.1.jar:3.1.1]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:319) ~[spring-boot-3.1.1.jar:3.1.1]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.1.jar:3.1.1]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.1.jar:3.1.1]
    at br.com.alura.screenmatch.ScreenmatchApplication.main(ScreenmatchApplication.java:17) ~[classes/:na]
Caused by: java.lang.NullPointerException: Cannot invoke "java.util.List.stream()" because the return value of "br.com.alura.screenmatch.model.DadosTemporada.episodios()" is null
    at br.com.alura.screenmatch.principal.Principal.lambda$buscarEpisodioPorSerie$2(Principal.java:108) ~[classes/:na]
    at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273) ~[na:na]
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na]
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[na:na]
    at br.com.alura.screenmatch.principal.Principal.buscarEpisodioPorSerie(Principal.java:110) ~[classes/:na]
    at br.com.alura.screenmatch.principal.Principal.exibeMenu(Principal.java:51) ~[classes/:na]
    at br.com.alura.screenmatch.ScreenmatchApplication.run(ScreenmatchApplication.java:23) ~[classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:771) ~[spring-boot-3.1.1.jar:3.1.1]
    ... 5 common frames omitted

Esse é o erro que está ocorrendo.

solução!

achei o problema! era uma besteira. está assim:

var json = consumo.obterDados(ENDERECO + serieGet
                        .getTitulo().trim().toLowerCase().replace(" ","+") + "&" + i + API_KEY);

E corrigi para assim:

var json = consumo.obterDados(ENDERECO + serieGet
                        .getTitulo().trim().toLowerCase().replace(" ","+") + "&season=" + i + API_KEY);

Tinha esquecido como funcionava o link do site OMDB.

A parte do codigo por completo:

private void buscarEpisodioPorSerie(){
        System.out.println("Todas as séries registradas:");
        listarSeriesBuscadas();
        System.out.print("Digite o nome da série: ");
        var nomeSerie = leitura.nextLine();

        Optional<Serie> serie = series.stream()
                .filter(s -> s.getTitulo().toLowerCase().contains(nomeSerie.toLowerCase()))
                .findFirst();
        if(serie.isPresent()) {

            var serieGet = serie.get();
            List<DadosTemporada> temporadas = new ArrayList<>();

            for (int i = 1; i <= serieGet.getTotalTemporadas(); i++) {
                var json = consumo.obterDados(ENDERECO + serieGet
                        .getTitulo().trim().toLowerCase().replace(" ","+") + "&season=" + i + API_KEY);
                DadosTemporada dadosTemporada = conversor.obterDados(json, DadosTemporada.class);
                temporadas.add(dadosTemporada);
            }

            temporadas.forEach(System.out::println);
            List<Episodio> episodios = temporadas.stream()
                    .flatMap(d -> d.episodios().stream()
                            .map(e -> new Episodio(d.numero(), e)))
                    .collect(Collectors.toList());
            serieGet.setEpisodios(episodios);
            repositorio.save(serieGet);
        } else {
            System.out.println("Série não encontrada.");
        }
    }