Несколько ключей и значений JSONObject не будут сохранены для анализа

у меня есть класс адаптера с флажком, и когда флажок установлен, он нажимает клавишу JSONObject и значение для анализа. Внутри моего приложения он сохраняет только один ключ и значение для анализа как JSONObject, и я хочу, чтобы мое приложение сохраняло несколько ключей и значений в Parse при выборе других флажков.

когда я выбираю другой флажок, он изменяет один ключ и значение, а не добавляет другой набор в JSONObject

фото строки внутри разбора в том числе в JSONObject

вместо этого я хотел бы иметь Jsonobject внутри Parse для сохранения данных, как это, когда другие флажки с разными ключами и значениями выбраны.

{"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();

            }
        }
    });

функциональный код при условии, просто сохраняет на ключ и значение пары.

Изменить: Если вам интересно, что делает тост, когда вы нажимаете флажок здесь.

enter image description here

3 ответов


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();

        }
    }
});

в вашем OnClickListener вы не обновляете объект, который вы отправляете в базу данных синтаксического анализа. Таким образом, объект, который вы отправляете в базу данных синтаксического анализа, не обновляется. Данные устанавливаются для объекта JSON только один раз за пределами OnClickListener.


Проблема Решена

изменить(ы) составила:

        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;

    }