将 JSON 解析为自定义 ArrayList,只返回最后一项?
Parsing JSON to custom ArrayList, only returning last item?
我发现这有点奇怪,我正在从我的 /assets 文件夹中的文件中解析一些 JSON。我已经设置了一个自定义的 ArrayList。现在,当我尝试将 ArrayList 中的数据添加到列表视图或微调器(相同适配器)时,它只显示最后一项。这是我的代码:
我的解析方法:
public ArrayList<ShopName> parseJSON(String json) {
ArrayList<ShopName> shop = new ArrayList<>();
ShopName item = new ShopName();
Log.d(TAG, json);
try {
JSONArray jArray = new JSONArray(json);
for (int i=0; i < jArray.length();i++) {
JSONObject jObject = jArray.getJSONObject(i);
item.setFromCurrency(jObject.getString("from"));
item.setToCurrency(jObject.getString("to"));
item.setRate(jObject.getString("cost"));
data.add(item);
}
} catch (JSONException jen) {
jen.printStackTrace();
}
return shop;
}
我不太确定我的错误在哪里。我是否错误地解析了它,也许存储不正确?我感觉这是我的 ArrayList,但我确定我应该如何修复它,我尝试使用不同的适配器并搜索 Whosebug,但它们都有不同的问题,所以现在很难缩小范围。
非常感谢您对此的帮助。谢谢。
public ArrayList<Data> parseJSON(String json) {
ArrayList<Data> data = new ArrayList<>();
// Data item = new Data(); // Move this into for loop
Log.d(TAG, json);
try {
JSONArray jArray = new JSONArray(json);
for (int i=0; i < jArray.length();i++) {
Data item = new Data();
JSONObject jObject = jArray.getJSONObject(i);
item.setFromCurrency(jObject.getString("from"));
item.setToCurrency(jObject.getString("to:"));
item.setRate(jObject.getString("rate"));
data.add(item);
}
} catch (JSONException je) {
Log.d(TAG, je.getMessage());
}
return data;
}
您只需初始化一次项目对象,这就是原因。移动
Data item = new Data();
进入你的 for 循环。
您应该为每个 JSON 数组项创建新的数据对象。
public ArrayList<Data> parseJSON(String json) {
// remove this
// Data item = new Data();
...
try {
JSONArray jArray = new JSONArray(json);
for (int i=0; i < jArray.length();i++) {
// move it here
Data item = new Data();
...
data.add(item);
}
} catch (JSONException je) {
Log.d(TAG, je.getMessage());
}
return data;
}
我发现这有点奇怪,我正在从我的 /assets 文件夹中的文件中解析一些 JSON。我已经设置了一个自定义的 ArrayList。现在,当我尝试将 ArrayList 中的数据添加到列表视图或微调器(相同适配器)时,它只显示最后一项。这是我的代码:
我的解析方法:
public ArrayList<ShopName> parseJSON(String json) {
ArrayList<ShopName> shop = new ArrayList<>();
ShopName item = new ShopName();
Log.d(TAG, json);
try {
JSONArray jArray = new JSONArray(json);
for (int i=0; i < jArray.length();i++) {
JSONObject jObject = jArray.getJSONObject(i);
item.setFromCurrency(jObject.getString("from"));
item.setToCurrency(jObject.getString("to"));
item.setRate(jObject.getString("cost"));
data.add(item);
}
} catch (JSONException jen) {
jen.printStackTrace();
}
return shop;
}
我不太确定我的错误在哪里。我是否错误地解析了它,也许存储不正确?我感觉这是我的 ArrayList,但我确定我应该如何修复它,我尝试使用不同的适配器并搜索 Whosebug,但它们都有不同的问题,所以现在很难缩小范围。
非常感谢您对此的帮助。谢谢。
public ArrayList<Data> parseJSON(String json) {
ArrayList<Data> data = new ArrayList<>();
// Data item = new Data(); // Move this into for loop
Log.d(TAG, json);
try {
JSONArray jArray = new JSONArray(json);
for (int i=0; i < jArray.length();i++) {
Data item = new Data();
JSONObject jObject = jArray.getJSONObject(i);
item.setFromCurrency(jObject.getString("from"));
item.setToCurrency(jObject.getString("to:"));
item.setRate(jObject.getString("rate"));
data.add(item);
}
} catch (JSONException je) {
Log.d(TAG, je.getMessage());
}
return data;
}
您只需初始化一次项目对象,这就是原因。移动
Data item = new Data();
进入你的 for 循环。
您应该为每个 JSON 数组项创建新的数据对象。
public ArrayList<Data> parseJSON(String json) {
// remove this
// Data item = new Data();
...
try {
JSONArray jArray = new JSONArray(json);
for (int i=0; i < jArray.length();i++) {
// move it here
Data item = new Data();
...
data.add(item);
}
} catch (JSONException je) {
Log.d(TAG, je.getMessage());
}
return data;
}