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

Text 'N/A' could not be parsed at index 0

Quando vou buscar uma série como "stranger things", meu código apresenta esta exceção. Já tentei tratar a exceção, mas não tive sucesso. Segue abaixo o código completo:

package br.com.alura.screenmatch.principal;

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.model.Episodio; import br.com.alura.screenmatch.service.ConsumoApi; import br.com.alura.screenmatch.service.ConverteDados;

import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner; import java.util.stream.Collectors;

public class Principal { private Scanner sc = new Scanner(System.in);

private ConsumoApi consumo = new ConsumoApi();
private ConverteDados conversor = new ConverteDados();

private final String ENDERECO = "https://www.omdbapi.com/?t=" ;
private final String API_KEY = "&apikey=8c33ead6";

public void exibeMenu(){
    System.out.println("Digite o nome da série p/ busca: ");
    var nomeSerie = sc.nextLine();
    var json = consumo.obterDados(ENDERECO + nomeSerie.replace(" ", "+") + API_KEY);
    DadosSerie dados = conversor.obterDados(json, DadosSerie.class);
    System.out.println(dados);
    List<DadosTemporada> temporadas = new ArrayList<>();

    for(int i = 1; i <= dados.totalTemporadas(); i++){
        json = consumo.obterDados(ENDERECO + nomeSerie.replace(" ", "+") + "&season=" + i + API_KEY);
        DadosTemporada dadosTemporada = conversor.obterDados(json, DadosTemporada.class);
        temporadas.add(dadosTemporada);

    }
    temporadas.forEach(t -> t.episodios().forEach(e -> System.out.println(e.titulo())));
    temporadas.forEach(System.out::println);

    List<DadosEpisodio> dadosEpisodios = temporadas.stream()
            .flatMap(t -> t.episodios().stream())
            .collect(Collectors.toList());

    System.out.println("\nTOp 5 Episódios: ");
    dadosEpisodios.stream()
            .filter(e -> !e.avaliacao().equalsIgnoreCase("N/A"))
            .sorted(Comparator.comparing(DadosEpisodio::avaliacao).reversed())
            .limit(5)
            .forEach(System.out::println);

    List<Episodio> episodios = temporadas.stream()
            .flatMap(t -> t.episodios().stream()
                    .map(d -> new Episodio(t.numero(), d))
            ).collect(Collectors.toList());


    System.out.println("A partir de que ano você deseja ver os episódios? ");
    var ano = sc.nextInt();

    LocalDate dataBusca = LocalDate.of(ano, 1, 1);

    DateTimeFormatter formatador = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    episodios.stream()
            .filter(e -> e.getDataLancamento() != null && e.getDataLancamento().isAfter(dataBusca))
            .forEach(e -> System.out.println(
                    "Temporada: " + e.getTemporada() +
                            "Episódio: " + e.getTitulo() +
                            "Data de Lançamento: " + e.getDataLancamento().format(formatador)
            ));

  

}

}

2 respostas

Olá,

O código parece correto.

Deve ser por causa da resposta do server, você vai ter que debugar (rodar com debug) e ir linha a linha ver a onde o erro ocorre.

Chegou a fazer isso ?

E como tentou resolve-la ?

Atte

solução!

Consegui resolver. O erro estava na classe Episodios. A exceção deve ser tratada da seguinte forma:

public Episodio(Integer numeroTemporada, DadosEpisodio dadosEpisodio){ this.temporada = numeroTemporada; this.titulo = dadosEpisodio.titulo(); this.numeroEpisodio = dadosEpisodio.numero();

    try {
        this.avaliacao = Double.valueOf(dadosEpisodio.avaliacao());
    }catch (NumberFormatException ex){
        this.avaliacao = 0.0;
    }
    try {
        if(!dadosEpisodio.dataLancamento().equalsIgnoreCase("N/A")){
            this.dataLancamento = LocalDate.parse(dadosEpisodio.dataLancamento());
        }else{
            this.dataLancamento = null;
        }
        this.dataLancamento = LocalDate.parse(dadosEpisodio.dataLancamento());
    }catch(DateTimeParseException ex){
        this.dataLancamento = null;
    }
}

Se houver alguma forma melhor de lidar com essa exceção, peço por gentileza a sua ajuda...