Put方法替换jsonarray的前一个对象

时间:2013-05-21 04:19:42

标签: android json

我试图形成这种jsonarray

[
 { 
  "userIdentity":"bbb",
  "admin":true/false
 },
 { 
  "userIdentity":"bbb",
  "admin":true/false
 }
.
.
.

        ]

我在Android中使用此代码,从hashmap添加来自:添加:

        JSONObject inerobj=new JSONObject();
        JSONArray jsonarray=new JSONArray();
        for (String s : toAdd.keySet()) {
        //  Log.d("userid",s);
          inerobj.put("userIdentity", s);
          inerobj.put("admin", Boolean.parseBoolean(toAdd.get(s)));
          Log.d("inerobj.toString",inerobj.toString());
          jsonarray.put(inerobj);
          Log.d("jsonarray.toString",jsonarray.toString());             
        }

hashmap toAdd具有:

towhid37:value=true
towhid32:value=true
inerobj

值是正确的。但是当将inerobj附加到jsonarray时,它会添加第1 value(towhid37)个确定。 bt当它放入第二个value(towhid32)时它也会替换第一个值,即数组的第一个元素现在变为(towhid32)。

Heres Logcat输出:

05-20 12:20:43.968: D/inerobj.toString(3788): {"admin":true,"userIdentity":"towhid37"}

05-20 12:20:43.988: D/jsonarray.toString(3788): [{"admin":true,"userIdentity":"towhid37"}]

05-20 12:20:43.988: D/inerobj.toString(3788): {"admin":true,"userIdentity":"towhid32"}

05-20 12:20:44.038: D/jsonarray.toString(3788): [{"admin":true,"userIdentity":"towhid32"},{"admin":true,"userIdentity":"towhid32"}]

这里有什么问题?

1 个答案:

答案 0 :(得分:2)

添加

inerobj=new JSONObject();
在for循环中

据我所知,它存储了对JSONObject的引用而不是它的值,这就是为什么这些值似乎被覆盖了。只需重新初始化变量即可添加新值。