我正在尝试清理我的应用程序上将发送到服务器端的一些用户输入。根据服务器设置,用户输入的数据可能会在创建或访问文件和文件夹时使用。显然,卫生也将在服务器上处理,但我不会,由于应用程序的性质,应用程序将无法控制这一点。因此,我觉得在我或我的应用程序可以控制的地方拥有端到端的卫生设施是我的责任。
我试图清理的首选项是将传递给服务器的相册名称。
根据Log.d
输出,这工作正常。但是,当我单击首选项字段对其进行编辑时,它会显示未经处理的输入,并且当将首选项传递给服务器时,它也会显示未经处理的输入。
FileUtil.sanitize(stringValue)
是一种简单的方法,它修剪前导和尾随空格并从字符串中删除../
和,至少现在。..\
我知道还有其他我需要看的,只是还不是 100% 的。
所以,显而易见的问题是,我错过了什么?完成后是否有一个事件会覆盖我在这里所做的更改?我感觉有些东西正在覆盖我的更改,因为当我在更改后立即获得值时,它会显示正确的、经过清理的数据。
/**
* A preference value change listener that updates the preference's summary
* to reflect its new value.
*/
private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
String stringValue = value.toString();
if (preference instanceof ListPreference) {
// For list preferences, look up the correct display value in
// the preference's 'entries' list.
ListPreference listPreference = (ListPreference) preference;
int index = listPreference.findIndexOfValue(stringValue);
// Set the summary to reflect the new value.
preference.setSummary(
index >= 0
? listPreference.getEntries()[index]
: null);
} else if (preference.getKey().equals("text_default_album")) {
Log.d(TAG, "default pref: "+preference.getKey()+" value: "+stringValue);
stringValue = FileUtil.sanitize(stringValue);
Log.d(TAG, "default pref: "+preference.getKey()+" value: "+stringValue);
preference.setSummary(stringValue);
SharedPreferences prefs = preference.getSharedPreferences();
String def = prefs.getString("text_default_album", "");
Boolean updated = prefs.edit().putString("text_default_album", stringValue).commit();
String def2 = prefs.getString("text_default_album", "");
Log.d(TAG, "def: "+def);
Log.d(TAG, "def2: "+def2);
Log.d(TAG, "updated: "+updated);
} else {
// For all other preferences, set the summary to the value's
// simple string representation.
preference.setSummary(stringValue);
}
return true;
}
};