【问题标题】:Problems with lists and Retrofit2 and gson converter use in java android studiojava android studio中列表和Retrofit2和gson转换器使用的问题
【发布时间】:2021-02-06 11:53:31
【问题描述】:

我正在尝试使用改造来调用我的后端,以获取一个论坛的主题列表,用于一个 andorid 应用程序。

我检查了请求的 url,它是正确的,但是当我试图获取响应的内容时,我得到一个空列表。我已经与邮递员核实过,我得到了下一种格式的所需结果:

 "gaiaIkustekoJSON": [
        {
            "idGaia": 1,
            "fecha": "2020/11/19 19:52:16",
            "grupo": "student",
            "texto": "Arazoak problemekin;Nahiko larri nabil problemak ebazteko ariketetan, nonork metodoren bat azaldu ahal dit?",
            "alias": "Prueba0"
        }]

我的android结构是下一个:

改造设置:

 this.login = login;
        this.passwd=passwd;

        Gson gson = new GsonBuilder()
                .create();

        OkHttpClient authClient = new OkHttpClient().newBuilder().addInterceptor(chain -> {
            Request originalRequest = chain.request();
            Request.Builder builder = originalRequest.newBuilder()
                    .header("Authorization", Credentials.basic(login, passwd));

            Request newRequest = builder.build();
            return chain.proceed(newRequest);
        }).build();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .client(authClient)
                .build();

        api = retrofit.create(EhuApi.class);
       // Log.d("pruebaretrofit", "se instancia bien la interfaz");
        Log.d("pruebaretrofit", login+"/"+passwd);

API调用函数:

return api.getGaiak("student").execute().body() ;

API 调用响应获取:

Gaiak gaia=activity.backend.getGaiak();

并且之前使用的bean有下一个结构:

public class Gaiak {
    private List<Gai> gaiak;
    public Gaiak(){
        this.gaiak=new ArrayList<Gai>();
    }
    public Gaiak(List<Gai> gaiak){
        super();
        this.gaiak=gaiak;
    }

    public List<Gai> getGaiak() {
        return gaiak;
    }

    public void setGaiak(List<Gai> gaiak) {
        this.gaiak = gaiak;
    }
}

组成列表的bean:

public class Gai {
    private int idGaia;
    private String fecha;
    private String grupo;
    private String texto;
    private String alias;
    public Gai(){

    }
    public Gai(int idGaia, String fecha, String grupo, String texto, String alias) {
        super();
        this.idGaia = idGaia;
        this.fecha = fecha;
        this.grupo = grupo;
        this.texto = texto;
        this.alias = alias;
    }
    public String getFecha() {
        return fecha;
    }

    public void setFecha(String fecha) {
        this.fecha = fecha;
    }

    public String getGrupo() {
        return grupo;
    }

    public void setGrupo(String grupo) {
        this.grupo = grupo;
    }

    public String getTexto() {
        return texto;
    }

    public void setTexto(String texto) {
        this.texto = texto;
    }

    public int getIdGaia() {
        return idGaia;
    }

    public void setIdGaia(int idGaia) {
        this.idGaia = idGaia;
    }

    public String getAlias() {
        return alias;
    }

    public void setAlias(String alias) {
        this.alias = alias;
    }
}

拜托,我真的需要帮助,有人可以帮助我吗?

谢谢!!

【问题讨论】:

标签: android gson retrofit2


【解决方案1】:

GsonConverterFactory 尝试使用类中的公共属性名称或公共 getter 将 json 数据与您的 POJO 映射,并使用反射将正确的数据放入正确的属性中。 当它没有找到正确的属性时,结果将被忽略。 即使你请求成​​功并得到结果,它也只会迷失在茫茫人海中。

因此,在您的情况下,结果被忽略,因为在json 中,列表的名称是gaiaIkustekoJSON,而在您的POJO 中,名称是gaiak,这就是它无法映射和放置列表数据的原因gaiaIkustekoJSON in gaiak 因为名字不匹配现在你可以做三件事

1.将列表名称从gaiak更改为gaiaIkustekoJSON

2.将getter的名字改为setGaiaIkustekoJSON

3.把@SerializedName("gaiaIkustekoJSON")放在private List&lt;Gai&gt; gaiak;上方

祝你有美好的一天

【讨论】:

  • 谢谢!我自己发现得更快,但感谢您的解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多