3
respostas

variavel nome ficou NULL

Acompanhando a aula fiquei digitando o código pra pegar prática, e na impressão o nome do filme fica "null", e no json ele não aparece também, reassisti a aula e não encontrei meu erro. alguém poderia me ajudar?

3 respostas

Marcio, bom dia.

Para conseguirmos averiguar melhor disponibilize o codigo por gentileza.

package br.com.alura.screenmatch.principal;

import br.com.alura.screenmatch.excecao.ErroDeConversaoDeAnoException; import br.com.alura.screenmatch.modelos.Titulo; import br.com.alura.screenmatch.modelos.TituloOmdb; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder;

import java.io.FileWriter; 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.ArrayList; import java.util.List; import java.util.Scanner;

public class PrincipalComBusca { public static void main(String[] args) throws IOException, InterruptedException { Scanner leitura = new Scanner(System.in); String busca = ""; List titulos = new ArrayList<>(); Gson gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE) .setPrettyPrinting() .create();

    while (!busca.equalsIgnoreCase("sair")) {


        System.out.println("Digite o filme para busca: ");
        busca = leitura.nextLine();

        if(busca.equalsIgnoreCase("sair")){
            break;
        }

        String endereco = "https://www.omdbapi.com/?t=" + busca.replace(" ", "+") + "&apikey=RESTRITO";
        System.out.println(endereco);
        try {
            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(endereco))
                    .build();
            HttpResponse<String> response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());

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


            TituloOmdb meuTituloOmdb = gson.fromJson(json, TituloOmdb.class);
            System.out.println(meuTituloOmdb);
            //try {
            Titulo meuTitulo = new Titulo(meuTituloOmdb);
            System.out.println("Titulo ja convertido");
            System.out.println(meuTitulo);

            titulos.add(meuTitulo);
        } catch (NumberFormatException e) {
            System.out.println("aconteceu um erro: ");
            System.out.println(e.getMessage());
        } catch (IllegalArgumentException e) {
            System.out.println("Algum erro de argumento na busca, verifique o endereço");
        } catch (ErroDeConversaoDeAnoException e) {
            System.out.println(e.getMessage());
        }

    }
    System.out.println(titulos);

    FileWriter escrita = new FileWriter("filmes.json");
    escrita.write(gson.toJson(titulos));
    escrita.close();
    System.out.println("O programa finalizou corretamente!");

}

}

Marcio,

Posso estar equivocado, mas as vezes,o problema está na sua classe TituloOmdb onde você pode ter setado as variaveis diferentes do retorno, no caso precisaria ser public record TituloOmdb(String title, String year, String runtime)

Que olhando a parte da request para a API, não tem nada incorreto. Claro que ali eu não passaria o response.body() para uma String e depois passar para o gson.fromJson, eu faria assim:

TituloOmdb meuTituloOmdb = gson.fromJson(response.body(), TituloOmdb.class);

Mas ainda creio que o erro está na sua classe TituloOmdb.