android - For 循环两次而不是一次添加 JSON 响应
问题描述
实际上,我正在解析 JSON 并将 ts 数据存储在模型类中。但是特定数组的数据加了两次请帮帮我。我无法检测到我在哪里做错了编码。
我刚刚更新了我的代码,请检查并给我解决方案。问题是数组(数据)中的数据不符合预期。它将复制到其中的所有对象。
这是我的编码表:
这是我的模型课:
ConfigurableProductModel {
public String color_name;
public String color_id;
public ArrayList<Data> data;
public ArrayList<Data> getData() {
return data;
}
public void setData(ArrayList<Data> data) {
this.data = data;
}
public List<String> total_size;
public String getColor_name() {
return color_name;
}
public void setColor_name(String color_name) {
this.color_name = color_name;
}
public String getColor_id() {
return color_id;
}
public void setColor_id(String color_id) {
this.color_id = color_id;
}
public List<String> getTotal_size() {
return total_size;
}
public void setTotal_size(List<String> total_size) {
this.total_size = total_size;
}
public static class Data{
public String pro_id;
public String getPro_id() {
return pro_id;
}
public void setPro_id(String pro_id) {
this.pro_id = pro_id;
}
public String getPro_size() {
return pro_size;
}
public void setPro_size(String pro_size) {
this.pro_size = pro_size;
}
public String pro_size;
}
}
在这里我正在解析数据
try {
JSONArray jsonArray=new
JSONArray(response.toString());
for(int i=0;i<jsonArray.length();i++)
{
JSONObject jsonObject=jsonArray.getJSONObject(i);
ConfigurableProductModel configurableProductModel=new ConfigurableProductModel();
configurableProductModel.setColor_name(jsonObject.getString("name"));
configurableProductModel.setColor_id(jsonObject.getString("id"));
JSONArray jsonArray_data=jsonObject.getJSONArray("data");
sizes_list.clear();
for(int m=0;m<jsonArray_data.length();m++)
{
JSONObject jsonObject_data=jsonArray_data.getJSONObject(m);
ConfigurableProductModel.Data data=new ConfigurableProductModel.Data();
data.setPro_id(jsonObject_data.getString("entity_id"));
data.setPro_size(jsonObject_data.getString("size_label"));
sizes_list.add(jsonObject_data.getString("size_label"));
datasmodels.add(data);
configurableProductModel.setData(data);
}
configurableProductModel.setTotal_size(sizes_list);
configurableProductModels.add(configurableProductModel);
}
解析后:
[{
"color_id": "20",
"color_name": "Mountain",
"data": [{
"pro_id": "785",
"pro_size": "169"
}, {
"pro_id": "786",
"pro_size": "179"
}, {
"pro_id": "787",
"pro_size": "189"
}, {
"pro_id": "782",
"pro_size": "169"
}, {
"pro_id": "783",
"pro_size": "179"
}, {
"pro_id": "784",
"pro_size": "189"
}],
"total_size": ["169", "179", "189"]
}, {
"color_id": "30",
"color_name": "Sky Blue",
"data": [{
"pro_id": "785",
"pro_size": "169"
}, {
"pro_id": "786",
"pro_size": "179"
}, {
"pro_id": "787",
"pro_size": "189"
}, {
"pro_id": "782",
"pro_size": "169"
}, {
"pro_id": "783",
"pro_size": "179"
}, {
"pro_id": "784",
"pro_size": "189"
}],
"total_size": ["169", "179", "189"]
}]
解决方案
我对你的错误的猜测我会添加这个答案。
在您的代码中
datasmodels.add(data);
上面的代码似乎是数据对象模型的数组列表。
那么你的代码应该是这样的
for(int m=0;m<jsonArray_data.length();m++)
{
JSONObject jsonObject_data=jsonArray_data.getJSONObject(m);
/* Declare your arraylist for data object here..! */
ArrayList<Data> datasmodels = new ArrayList();
ConfigurableProductModel.Data data=new ConfigurableProductModel.Data();
data.setPro_id(jsonObject_data.getString("entity_id"));
data.setPro_size(jsonObject_data.getString("size_label"));
sizes_list.add(jsonObject_data.getString("size_label"));
datasmodels.add(data);
configurableProductModel.setData(datasmodels); //Changed Here
}
您的问题是
datamodels
保留 previuos 数据,因此使其在 for 循环中声明将每次重新创建以加载新数据。
推荐阅读
- jquery - jQuery Validation Set Defaults 不适用于 laravel
- plantuml - 在哪里可以找到旧版本的 PlantUML 文档?
- javascript - 组合来自两个不同数组的两个对象
- java - 通过 Yaml 配置 H2 数据库 - Spring Boot
- flutter - 如何制作 ListViewBuilder 和其他小部件的 ScrollView?
- python - 使用 Numba 时如何指定“字符串”数据类型?
- apache-spark - 这个 spark 程序将如何执行?
- excel - 当单元格中的公式结果发生变化时,宏不会运行。为什么?
- android - 运行 android 时 Moengage 错误的 React-native 设置:包 MoEngage 不存在
- c# - 从文件中大量导入/创建 ApplicationUser