【问题标题】:Retrieved data from JSON but can't Accessing Arraylist from JSONobject从 JSON 检索数据但无法从 JSONobject 访问 Arraylist
【发布时间】: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)。怎么办?

标签: java android json arraylist


【解决方案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 了吗?
猜你喜欢
  • 1970-01-01
  • 2016-02-26
  • 2017-08-18
  • 1970-01-01
  • 2020-12-10
  • 2017-12-10
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
相关资源
最近更新 更多