java - 我想写一个固定值的变量JSON

标签 java android json

所以我的问题如下:

holder.buttonViewID.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                if(isChecked){
                    toggle.setCompoundDrawablesWithIntrinsicBounds(null, rmfcart , null, null);
                    try {
                        pack.put("imgid", resID2);
                        pack.put("desc", descval);
                        Log.d("PERSODEBUG", pack.toString());
                        trolly.put(itemID, pack.toString());
                        Log.d("PERSODEBUG", trolly.toString());
                    } catch (JSONException e) {
                        e.printStackTrace();
                        }
                }
[...]

pack 和 trolley 是 JSONObjects, 手推车表现得非常好,我可以向其中添加元素并删除它们,它的行为符合预期,但问题出在包装上。每次更改时,所有已添加到手推车的包实例都会被修改。 例如:

if i add an item to trolly:
{"2":{"imgid":2131165314,"desc":"test1"}}
if i add a 2nd item:
{"2":{"imgid":2131165330,"desc":"test2"},"3":{"imgid":2131165330,"desc":"test2"}}

正如您看到的包的新旧实例在手推车内都被修改, 谁能告诉我如何在手推车内编写固定的包实例字符串来避免这个问题?我确实尝试了一些事情,比如 正如您在上面看到的 toString() 没有任何效果。

非常感谢

最佳答案

每次添加之前都应该创建新的包实例,而不是全局实例

JSONObject pack = new JSONObject(); // new instance
pack.put("imgid", resID2);
pack.put("desc", descval);
Log.d("PERSODEBUG", pack.toString());
trolly.put(itemID, pack.toString());

关于java - 我想写一个固定值的变量JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58198520/

相关文章:

java - 使用谷歌地图获取 Activity 和 fragment 之间的数据

javascript - 在不影响其他类似对象的情况下删除 ng-repeat 中的对象

json - Elasticsearch匹配多个IP子网DSL查询

android - 在位图 XML 中使用 VectorDrawables 并对其着色

android - sqlite更新一个元组

android - Dagger2 - FragmentSubcomponentBuilder 未实现 AndroidInjector.Factory

javascript - array.map 不是函数

java - 保存到 LinkedHashSet <String> - 初学者

java - 重用 Java 方法的最佳方式

java - 我使用 CardLayout 得到 NullPointerException