Сохранить элемент предпочтений в общих настройках - PullRequest
0 голосов
/ 05 октября 2018

Я добавляю раздел настроек в мое приложение для Android.В дополнение к некоторым статическим настройкам, этот раздел предоставляет возможность динамического добавления дополнительных подразделов предпочтений.

enter image description here

Как показано на рисунке, нажав «Добавить устройство », я могу добавить дополнительные элементы предпочтений, которые, в свою очередь, позволяют мне войти в соответствующий подраздел предпочтений для дальнейших настроек.Однако я не могу сделать эти динамические настройки постоянными.Я пытался сериализовать объекты Preference в String для сохранения их в SharedPreferences, но система выдает это исключение:

java.lang.SecurityException: Can not make a java.lang.reflect.Method constructor accessible

Это код, который я написал:

Preference addDeviceBtn = (Preference)findPreference("add_btn");
    if (addDeviceBtn != null) {
        addDeviceBtn.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference arg0) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
                builder.setTitle("Device Name");
                final EditText input = new EditText(getContext());
                LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT,
                        LinearLayout.LayoutParams.MATCH_PARENT);
                input.setLayoutParams(lp);
                builder.setView(input);

                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String deviceName = input.getText().toString();

                        SharedPreferences appSharedPrefs = PreferenceManager.getDefaultSharedPreferences(getContext());
                        if (!appSharedPrefs.contains(deviceName)) {

                            Preference preference = new Preference(getContext());
                            preference.setTitle(deviceName);
                            getPreferenceScreen().addPreference(preference);
                            preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
                                @Override
                                public boolean onPreferenceClick(Preference preference) {

                                    mListener.onDeviceSelected(deviceName);
                                    return false;
                                }
                            });

                            SharedPreferences.Editor prefsEditor = appSharedPrefs.edit();
                            Gson gson = new Gson();
                            String json = gson.toJson(preference); // <--- this is the problem
                            prefsEditor.putString("device_"+deviceName, json);
                            prefsEditor.apply();
                        } else
                            Toast.makeText(getActivity(), "Device already added", Toast.LENGTH_SHORT).show();
                    }
                });

                builder.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });

                builder.show();
                return true;
            }
        });
    }

Можете ли выПомоги мне, пожалуйста?Заранее спасибо.

...