从 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的主要内容,如果未能解决你的问题,请参考以下文章

我无法从 JSON 获取数据并且没有错误

无法使用 BigQuery 从 Google Datastore 检索 JSON 实体

Android AsyncTask 无法从 php-mysql 检索 JSON 字符串

从嵌套的 JSON 中检索数据

从mysql json android中检索数据

JSONObjec的作用详解——Web网络系列学习笔记