3
respostas

meu arquivo gera, mas não popula, json vazio.

meu arquivo gera mas não popula, json vazio.

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 um filme para busca: ");
        busca = leitura.nextLine();

        String endereco = "https://www.omdbapi.com/?t=" + busca.replace(" ", "+") + "&apikey=1836a1ba";
        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 já convertido");
            System.out.println(titulos);


        } 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());
        }

    }

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


}

}

3 respostas

Olá Aleksandar,

Você não está adicionando os títulos que está coletando da API na lista "titulos"?

Tente adicionar a linha "titulos.add(meuTitulo);" logo após a linha "Titulo meuTitulo = new Titulo(meuTituloOmdb);" e veja se isso resolve o problema.

Caso ainda tenha dúvidas, fique à vontade para perguntar.

Espero ter ajudado e bons estudos!

TituloOmdb meuTituloOmdb = gson.fromJson(json, TituloOmdb.class); System.out.println(meuTituloOmdb); Titulo meuTitulo = new Titulo(meuTituloOmdb); titulos.add(meuTitulo); System.out.println("Titulo já convertido"); System.out.println(meuTitulo);]

             porém o jsom vem zerado.

             [

{ "AnoDeLancamento": 0, "IncluidoNoPlano": false, "SomaDasAvaliacoes": 0.0, "TotalDeAvaliacoes": 0, "DuracaoEmMinutos": 0 }, { "AnoDeLancamento": 0, "IncluidoNoPlano": false, "SomaDasAvaliacoes": 0.0, "TotalDeAvaliacoes": 0, "DuracaoEmMinutos": 0 }, { "AnoDeLancamento": 0, "IncluidoNoPlano": false, "SomaDasAvaliacoes": 0.0, "TotalDeAvaliacoes": 0, "DuracaoEmMinutos": 0 }, { "AnoDeLancamento": 0, "IncluidoNoPlano": false, "SomaDasAvaliacoes": 0.0, "TotalDeAvaliacoes": 0, "DuracaoEmMinutos": 0 } ]

Olá Aleksandar,

Pelo trecho de código que você postou, parece que você está adicionando os títulos na lista "titulos" corretamente. No entanto, o arquivo JSON que está sendo gerado está vazio. Isso pode estar acontecendo porque o arquivo está sendo escrito antes que os títulos sejam adicionados à lista.

Uma solução seria mover a escrita do arquivo JSON para dentro do loop, após a adição de cada título na lista. Isso garantirá que o arquivo seja escrito somente depois que todos os títulos forem adicionados. Por exemplo:

while (!busca.equalsIgnoreCase("sair")) {
    // ...
    Titulo meuTitulo = new Titulo(meuTituloOmdb);
    titulos.add(meuTitulo);
    System.out.println("Titulo já convertido");
    System.out.println(meuTitulo);
}

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

Dessa forma, o arquivo JSON será escrito somente quando todos os títulos tiverem sido adicionados à lista.