1
resposta

Problema com o fromJson

quando executa o codigo aparece um java.lang.RutimeException com essa mensagem Exception in thread "main" java.lang.RuntimeException: Unable to create instance of class br.com.filmes.modulos.Titulo. Registering an InstanceCreator or a TypeAdapter for this type, or adding a no-args constructor may fix this problem. at com.google.gson@2.10.1/com.google.gson.internal.ConstructorConstructor$19.construct(ConstructorConstructor.java:373) at com.google.gson@2.10.1/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$FieldReflectionAdapter.createAccumulator(ReflectiveTypeAdapterFactory.java:427) at com.google.gson@2.10.1/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:383) at com.google.gson@2.10.1/com.google.gson.Gson.fromJson(Gson.java:1227) at com.google.gson@2.10.1/com.google.gson.Gson.fromJson(Gson.java:1137) at com.google.gson@2.10.1/com.google.gson.Gson.fromJson(Gson.java:1047) at com.google.gson@2.10.1/com.google.gson.Gson.fromJson(Gson.java:982) at HttpApisComFilmes/br.com.filmes.principal.PrincipalComBusca.main(PrincipalComBusca.java:33) Caused by: java.lang.UnsupportedOperationException: Cannot allocate class br.com.filmes.modulos.Titulo. Usage of JDK sun.misc.Unsafe is enabled, but it could not be used. Make sure your runtime is configured correctly. at com.google.gson@2.10.1/com.google.gson.internal.UnsafeAllocator$4.newInstance(UnsafeAllocator.java:117) at com.google.gson@2.10.1/com.google.gson.internal.ConstructorConstructor$19.construct(ConstructorConstructor.java:370) ... 7 more Como conceta isso OBs: meu codigo esta igual o da aula, pois achei que funcionaria porem continua com o erro

1 resposta

E aí, Eduardo! Pelo que vi, tá tendo uns pepinos na hora de converter esse JSON pro objeto Titulo, né? Tipo, o Gson tá reclamando que não consegue criar um Titulo lá.

O truque é que parece que a classe Titulo não tem um construtor sem parâmetros, sacou? Em Java, se tu não cria um construtor, o Java dá um padrão de graça. Mas se tu já criou um com parâmetros, o Java deixa de dar aquele padrão sem argumentos. E é aí que o Gson fica meio perdido, sem saber como criar um Titulo do zero.

A parada é simples: cola um construtor sem parâmetros na classe Titulo. Dá uma olhada aqui:

public class Titulo {
    private String nome;
    private int anoDeLancamento;

    // construtor sem argumentos
    public Titulo() {
    }

    // teu construtor antigo
    public Titulo(String nome, int anoDeLancamento) {
        this.nome = nome;
        this.anoDeLancamento = anoDeLancamento;
    }

    // deixei os getters e setters de lado
}

E, ó, não esquece que os nomes das variáveis na classe Titulo têm que casar com as chaves do JSON. Se der ruim, usa a anotação @SerializedName pra acertar isso. Tipo assim:

public class Titulo {
    @SerializedName("Title")
    private String nome;
    @SerializedName("Year")
    private int anoDeLancamento;

    // construtor, getters e setters tão aqui, mas coloquei só o essencial
}

Espero que clareie as ideias! Qualquer coisa, tamo aí!