我想用这种方式创建一个数组:
json = new JSONObject();
jsArray = new JSONArray();
for (int i = 1; i < j; i++) {
CheckBox checkBox = (CheckBox) findViewById(i);
if (checkBox.isChecked()) {
try {
String ean = (String) checkBox.getText();
json.put("ean", ean);
jsArray.put(json);
Log.v("jsArray", jsArray.toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我从代码中得到了这个(最后一行是重要的一行):
04-06 19:07:02.238: V/jsArray(9894): [{"ean":"8029694000"}]
04-06 19:07:02.238: V/jsArray(9894): [{"ean":"8029694200"},{"ean":"8029694200"}]
04-06 19:07:02.238: V/jsArray(9894): [{"ean":"8029694300"},{"ean":"8029694300"},{"ean":"8029694300"}]
但我想要这个:
[{"ean":"8029694000"},{"ean":"8029694200"},{"ean":"8029694300"}]
为什么用“旧的”ean变量覆盖数组?
答案 0 :(得分:1)
正如@SatelliteSD所述;您为每次迭代使用相同的JSONObject
。这是每次都更新THAT对象中的值,因为数组有多个对同一对象的引用;它多次输出相同的值
重写这样的事情可以解决问题。
jsArray = new JSONArray();
for (int i = 1; i < j; i++) {
CheckBox checkBox = (CheckBox) findViewById(i);
if (checkBox.isChecked()) {
try {
String ean = (String) checkBox.getText();
JSONObject json = new JSONObject();
json.put("ean", ean);
jsArray.put(json);
Log.v("jsArray", jsArray.toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答案 1 :(得分:0)
您将数据放在同一个对象json
中,并在json jsArray中添加相同的引用。因此,当您显示数组的内容时,它会向您显示唯一存在的引用的内容,这是循环中的最后一个影响。