【问题标题】:Several JSONObject keys and values won't save to Parse几个 JSONObject 键和值不会保存到 Parse
【发布时间】:2015-12-14 02:39:07
【问题描述】:

I have an adapter class with a checkbox and when the checkbox is selected it pushes a JSONObject key and value to Parse.在我的应用程序中,它只将一个键和值作为 JSONObject 保存到 Parse,我希望我的应用程序在选择其他复选框时将多个键和值保存到 Parse。

当我选择不同的复选框时,它会更改单个键和值,而不是向 JSONObject 添加另一个集合

Photo of the row inside Parse including the JSONObject

相反
{"2c1":true, "2c2":true, "2c3":true, "2c4":true, "2c5":true, "2c6":true}

而不是仅仅拥有这个

{"2c1":true}

这是我的适配器类中的代码

ChecklistAdapter.java

   final JSONObject myObject = new JSONObject();
    try {
        myObject.put(dataRecord.getID(), true);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    checkBox.setOnClickListener(new View.OnClickListener() {

        String idSelected = dataRecord.getID();

        public void onClick(View v) {


            if (((CheckBox) v).isChecked()) {

                ParseUser.getCurrentUser().put("checklistData", myObject);
                ParseUser.getCurrentUser().saveInBackground();

                Toast.makeText(getContext(), idSelected,
                        Toast.LENGTH_SHORT).show();

            } else {

                Toast.makeText(getContext(), "CheckBox is unchecked",
                        Toast.LENGTH_SHORT).show();

            }
        }
    });

提供的功能代码只是保存键值对。

编辑:如果您对单击此处的复选框时 Toast 的作用感到好奇。

【问题讨论】:

  • 在setOnclickListener里面,你已经添加了myObject,myObject好像没有被修改,期待第一次只添加一个值。
  • @TheNeoNoirDeveloper 如何将 Parse 中的现有 JSONObject 添加到 myObject
  • if (((CheckBox) v).isChecked()) { myObject.put(dataRecord.getID(), true); ParseUser.getCurrentUser().put("checklistData", myObject);}
  • @TheNeoNoirDeveloper 没用 :( 和你做的一模一样
  • 所以你将一个具有多个键/值对的对象放入解析对象中,保存,然后只看到其中一个键/值对?您检查过.put("checklistData", myObject); 中设置的内容吗?我敢打赌那里只有一个键/值对,可能是检查的最后一项。

标签: java android json parse-platform


【解决方案1】:
final JSONObject myObject = new JSONObject();

checkBox.setOnClickListener(new View.OnClickListener() {

    String idSelected = dataRecord.getID();

    public void onClick(View v) {


        if (((CheckBox) v).isChecked()) {

        try {
              myObject.put(dataRecord.getID(), true);
        } catch (JSONException e) {
              e.printStackTrace();
        }


            ParseUser parseUser= ParseUser.getCurrentUser();
            parseUser.put("checklistData", myObject);
            parseUser.saveInBackground();

            Toast.makeText(getContext(), idSelected,
                    Toast.LENGTH_SHORT).show();

        } else {

            Toast.makeText(getContext(), "CheckBox is unchecked",
                    Toast.LENGTH_SHORT).show();

        }
    }
});

【讨论】:

    【解决方案2】:

    在您的 OnClickListener 中,您并未更新要发送到解析数据库的对象。因此,您发送到解析数据库的对象没有得到更新。数据仅在 OnClickListener 之外为您的 JSON 对象设置一次。

    【讨论】:

    • 在 Parse 中,数据更改为最新单击的复选框,但仍保留为一对键和一个值,而不是添加更多。
    【解决方案3】:

    问题已解决

    所做的编辑:

            checkBox.setOnClickListener(new View.OnClickListener() {
    
            String idSelected = dataRecord.getID();
    
            public void onClick(View v) {
    
    
                if (((CheckBox) v).isChecked()) {
    
                    JSONObject myObject;
                    myObject = ParseUser.getCurrentUser().getJSONObject("checklistData");
    
                    try {
                        myObject.put(dataRecord.getID(), true);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
    
    
                    ParseUser parseUser= ParseUser.getCurrentUser();
                    parseUser.put("checklistData", myObject);
                    parseUser.saveInBackground();
    
                    Toast.makeText(getContext(), idSelected,
                            Toast.LENGTH_SHORT).show();
    
                } else {
    
                    Toast.makeText(getContext(), "CheckBox is unchecked",
                            Toast.LENGTH_SHORT).show();
    
                }
            }
        });
    
        return convertView;
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多