Я добавляю раздел настроек в мое приложение для Android.В дополнение к некоторым статическим настройкам, этот раздел предоставляет возможность динамического добавления дополнительных подразделов предпочтений.
Как показано на рисунке, нажав «Добавить устройство », я могу добавить дополнительные элементы предпочтений, которые, в свою очередь, позволяют мне войти в соответствующий подраздел предпочтений для дальнейших настроек.Однако я не могу сделать эти динамические настройки постоянными.Я пытался сериализовать объекты 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;
}
});
}
Можете ли выПомоги мне, пожалуйста?Заранее спасибо.