从 JSON 检索数据但无法从 JSONobject 访问 Arraylist
Posted
技术标签:
【中文标题】从 JSON 检索数据但无法从 JSONobject 访问 Arraylist【英文标题】:Retrieved data from JSON but can't Accessing Arraylist from JSONobject 【发布时间】:2021-02-07 18:55:50 【问题描述】:我是 android 和 Java 编程的新手,目前正在发展我的技能。
现在,我遇到了从 JSONresponse 访问 Arraylist 的问题。
只是我不知道如何基于 Json 嵌套对象启动我的变量,并在不将其设置为 recylerview 等的情况下访问它。
所以这是 JSON
"kode":1,
"pesan":"Anda Berhasil Login",
"data":["Id_Ortu":"1","NamaLengkapOrtu":"Alpiyan
Yamin"]
ResponseModel
类
public class ResponseModel
private int kode;
private String pesan,sql;
private List<DataModel> data;
public String getSql()
return sql;
public void setSql(String sql)
this.sql = sql;
public int getKode()
return kode;
public void setKode(int kode)
this.kode = kode;
public String getPesan()
return pesan;
public void setPesan(String pesan)
this.pesan = pesan;
public List<DataModel> getData()
return data;
public void setData(List<DataModel> data)
this.data = data;
ResponseModel
类
public class DataModel
private int Id_Perizinan, Id_Ortu;
private String NamaLengkapSantri, NamaLengkapOrtu, Alasan_Izin, Tgl_Pengajuan,
Durasi_Izin, Tgl_Kembali;
public int getId_Perizinan()
return Id_Perizinan;
public void setId_Perizinan(int id_Perizinan)
Id_Perizinan = id_Perizinan;
public int getId_Ortu()
return Id_Ortu;
public void setId_Ortu(int id_Ortu)
Id_Ortu = id_Ortu;
public String getNamaLengkapSantri()
return NamaLengkapSantri;
public void setNamaLengkapSantri(String namaLengkapSantri)
NamaLengkapSantri = namaLengkapSantri;
public String getNamaLengkapOrtu()
return NamaLengkapOrtu;
public void setNamaLengkapOrtu(String namaLengkapOrtu)
NamaLengkapOrtu = namaLengkapOrtu;
public String getAlasan_Izin()
return Alasan_Izin;
public void setAlasan_Izin(String alasan_Izin)
Alasan_Izin = alasan_Izin;
public String getTgl_Pengajuan()
return Tgl_Pengajuan;
public void setTgl_Pengajuan(String tgl_Pengajuan)
Tgl_Pengajuan = tgl_Pengajuan;
public String getDurasi_Izin()
return Durasi_Izin;
public void setDurasi_Izin(String durasi_Izin)
Durasi_Izin = durasi_Izin;
public String getTgl_Kembali()
return Tgl_Kembali;
public void setTgl_Kembali(String tgl_Kembali)
Tgl_Kembali = tgl_Kembali;
这就是我尝试检索数据的方式
public void loginAplikasi()
APIRequestData apiRequestData = RetroServer.koneksiRetrofit().create(APIRequestData.class);
Call<ResponseModel> loginApp = apiRequestData.ardLogin(username,password);
loginApp.enqueue(new Callback<ResponseModel>()
@Override
public void onResponse(Call<ResponseModel> call, Response<ResponseModel> response)
int kode = response.body().getKode();
String pesan = response.body().getPesan();
listData = response.body().getData();
int Id_Ortu = 0;
String NamaLengkapOrtu;
alertDialog(NamaLengkapOrtu);
else
alertDialog(pesan);
@Override
public void onFailure(Call<ResponseModel> call, Throwable t)
alertDialog(t.getMessage());
);
我使用 JSON 成功捕获了“kode”和“pesan”
int kode = response.body().getKode();
String pesan = response.body().getPesan();
我已将 listData 声明为新的数组列表
List<DataModel> listData = new ArrayList<>();
但是,我怎样才能访问的值
listData = response.body().getData();
其中包含 data
内的 array所以我可以启动变量 (NamaLengkapOrtu = listdata(arrayIndex))
提前致谢。
【问题讨论】:
你能发布你的 DataModel 和 ResponseModel 吗? @AkashBisht 先生您好,发布在此答案下方 @AlldiAghlan 你想在这里实现什么? 我想访问数据@Ali Ahsan中的json数组值 @AliAhsan 我想访问对象“数据”中的值,所以我可以启动 NamaLengkapOrtu = listData(value)。怎么办? 【参考方案1】:DataModel
类的问题。
public class DataModel
@SerializedName("Id_Ortu")
@Expose
private String idOrtu;
@SerializedName("NamaLengkapOrtu")
@Expose
private String namaLengkapOrtu;
public String getIdOrtu()
return idOrtu;
public void setIdOrtu(String idOrtu)
this.idOrtu = idOrtu;
public String getNamaLengkapOrtu()
return namaLengkapOrtu;
public void setNamaLengkapOrtu(String namaLengkapOrtu)
this.namaLengkapOrtu = namaLengkapOrtu;
那么你可以按如下方式访问数据:
String namaLengkapOrtu = listdata.get(index).getNamaLengkapOrtu();
String idOrtu = listdata.get(index).getIdOrtu();
【讨论】:
感谢您的建议,我可以知道如何在更改模型类后访问 myActivity 上的值吗?至于我想声明的示例 var NamaLengkapOrtu = listData(value of index) 您好,我在访问数据时收到错误 java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 这是我访问它的方式 int Id_Ortu = listData.get(0).getId_Ortu(); String NamaLengkapOrtu = listData.get(1).getNamaLengkapOrtu(); 目前listData的大小只有1,所以不能用1来做索引。将istData.get(1).getNamaLengkapOrtu();
更改为istData.get(0).getNamaLengkapOrtu();
终于!它通过在数据模型中添加序列化来完成。非常感谢先生。
@AlldiAghlan Serialized
不是必需的,只要您的模型类具有完全相同名称的成员变量。【参考方案2】:
因为您的 JSON 响应是:
"kode":1,
"pesan":"Anda Berhasil Login",
"data":["Id_Ortu":"1","NamaLengkapOrtu":"Alpiyan
Yamin"]
在您的模型类中使用以下注释:
@SerializedName("data")
@Expose
这里,“数据”是您要从 JSON 中获取的键。
尝试使用这个ResponseModel
类:
public class ResponseModel
private int kode;
private String pesan,SQL;
@SerializedName("data")
@Expose
private List<DataModel> data;
public String getSql()
return sql;
public void setSql(String sql)
this.sql = sql;
public int getKode()
return kode;
public void setKode(int kode)
this.kode = kode;
public String getPesan()
return pesan;
public void setPesan(String pesan)
this.pesan = pesan;
public List<DataModel> getData()
return data;
public void setData(List<DataModel> data)
this.data = data;
【讨论】:
感谢您的建议。我可以知道如何访问 jsom 数组并将其初始化到我的变量吗?添加注释后 寻求您的答案。 你可以像之前那样初始化你的变量.. 我很抱歉,我想我一直很困惑。我的意思是,我想根据 listData 索引值初始化我的其他变量,例如 var NamaLengkapOrtu = listData(Value of Index)。但是它总是让我出错 您遇到的错误是什么?你在 listData 中得到 jsonArray 了吗?以上是关于从 JSON 检索数据但无法从 JSONobject 访问 Arraylist的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 BigQuery 从 Google Datastore 检索 JSON 实体