1
resposta

[Dúvida] Codigo nao esta buscando as temporadas e as informações dos Episodios

Esta dando esse erro

java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "br.com.alura.screenmatch.model.DadosSerie.totalTemporadas()" is null
package br.com.alura.screenmatch;
import br.com.alura.screenmatch.model.DadosEpisodio;
import br.com.alura.screenmatch.model.DadosSerie;
import br.com.alura.screenmatch.model.DadosTemporada;
import br.com.alura.screenmatch.service.ConsumoApi;
import br.com.alura.screenmatch.service.ConverteDados;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.ArrayList;
import java.util.List;

@SpringBootApplication
public class ScreenmatchApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(ScreenmatchApplication.class, args);
    }


    @Override
    public void run(String... args) throws Exception {

        ConsumoApi consumoApi = new ConsumoApi();
        var json = consumoApi.obterDados("https://omdbapi.com/?t=the+boys&season=1&episode=2&apikey=15486266");

        ConverteDados conversor = new ConverteDados();
        DadosSerie dados = conversor.opterDados(json, DadosSerie.class);
        System.out.println("***** Series *****");
        System.out.println(dados);
        System.out.println("******************");
        DadosEpisodio dadosEpisodio = conversor.opterDados(json, DadosEpisodio.class);

        System.out.println("***** Dados do Episodios *****");
        System.out.println(dadosEpisodio);
        System.out.println("******************");
        List<DadosTemporada> temporadas  = new ArrayList<>();
        for(int i = 1; i <= dados.totalTemporadas();i++){
            json = consumoApi.obterDados("https://omdbapi.com/?t=the+boys&season="+ i +"&apikey=15486266");
            DadosTemporada dadosTemporada = conversor.opterDados(json, DadosTemporada.class);
            temporadas.add( dadosTemporada);
            System.out.println("***** Dados do Temporadas *****");
            System.out.println(dadosTemporada);
            System.out.println("******************");
        }
        temporadas.forEach(System.out::println);
    }
}
1 resposta

Olá, Ruan! Tudo bem?

O erro java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "br.com.alura.screenmatch.model.DadosSerie.totalTemporadas()" is null indica que o método totalTemporadas() da classe DadosSerie está retornando null, e você está tentando usar esse valor como se fosse um inteiro.

E isso está acontecendo porque ao iniciar a variável json que recebe uma string que irá um certo json com informações de uma série, porém, nesse link você está buscando uma season e episode especifico de uma série, logo não terá o campo referente ao total de temporadas.

Então, para ajustar esse erro, basta você adicionar um link que aponta diretamente para a serie, trazendo mais informações gerais da serie, assim contendo o campo de total de temporas. Seque o trecho a ser alterado:

        ConsumoApi consumoApi = new ConsumoApi();
        var json = consumoApi.obterDados("https://omdbapi.com/?t=the+boys&apikey=15486266");

        ConverteDados conversor = new ConverteDados();
        DadosSerie dados = conversor.opterDados(json, DadosSerie.class);

Note que o único ajuste feito foi no link. Talvez você esteja se perguntando porque essa parte do código do início causa problemas no que está no fim, isso acontece porque nesse trecho você define o objeto dados utilizado no for que lhe causou esse erro.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.