在 java android studio 中使用列表和 Retrofit2 和 gson 转换器的问题
Problems with lists and Retrofit2 and gson converter use in java android studio
我正在尝试使用改造来调用我的后端,以便为一个 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;
}
}
拜托,我真的需要帮助,有人可以帮助我吗?
谢谢!!
GsonConverterFactory
尝试使用 class 或 public 中的 public 属性名称将 json
数据映射到您的 POJO
getter 并使用反射将正确的数据放入正确的 属性 中。
当它找不到正确的 属性 时,结果将被忽略。
即使您成功请求并获得结果,它也会迷失在茫茫荒野中。
所以在你的情况下结果被忽略,因为在 json
中列表的名称是 gaiaIkustekoJSON
而在你的 POJO
中列表的名称是 gaiak
这就是为什么它无法映射并将列表 gaiaIkustekoJSON
的数据放入 gaiak
因为名称不匹配现在你可以做三件事
1.change 从 gaiak
到 gaiaIkustekoJSON
的列表名称
2.change getter 到 setGaiaIkustekoJSON
的名字
3.put @SerializedName("gaiaIkustekoJSON")
以上 private List<Gai> gaiak;
祝你有美好的一天
我正在尝试使用改造来调用我的后端,以便为一个 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;
}
}
拜托,我真的需要帮助,有人可以帮助我吗?
谢谢!!
GsonConverterFactory
尝试使用 class 或 public 中的 public 属性名称将 json
数据映射到您的 POJO
getter 并使用反射将正确的数据放入正确的 属性 中。
当它找不到正确的 属性 时,结果将被忽略。
即使您成功请求并获得结果,它也会迷失在茫茫荒野中。
所以在你的情况下结果被忽略,因为在 json
中列表的名称是 gaiaIkustekoJSON
而在你的 POJO
中列表的名称是 gaiak
这就是为什么它无法映射并将列表 gaiaIkustekoJSON
的数据放入 gaiak
因为名称不匹配现在你可以做三件事
1.change 从 gaiak
到 gaiaIkustekoJSON
2.change getter 到 setGaiaIkustekoJSON
3.put @SerializedName("gaiaIkustekoJSON")
以上 private List<Gai> gaiak;
祝你有美好的一天