2012-02-22 44 views
1

在Android应用程序中,我让用户通过运行扩展PreferenceActivity的类来编辑其偏好。 在res \ xml中我有一个文件 - preferences.xml - 它有一个xml描述用户可以配置的字段。诸如用户名和密码之类的东西。示例代码片段:如何确保在保存时清理sharedpreferences

<EditTextPreference android:name="User Name" 
android:summary="Name in Your Name/Company format" 
android:defaultValue="" android:title="Login name" android:key="userName" 
android:id="@+id/userName"/> 

<EditTextPreference android:name="Password" 
android:summary="Your web password" android:defaultValue="" 
android:title="Login password" android:password="true" android:key="userPassword" 
android:id="@+id/userPassword"/> 

事情按预期工作。从我的主应用程序代码中,我可以访问用户配置的值。

有一件事我希望得到一些关于如何处理的好建议:删除首选项值中的前导和尾随空格。

由于用户错误或由于有用的键盘应用程序,有时用户在EditTextPreferences字段中输入一个额外的空白字符。作为第一个或最后一个字符。

我宁愿如果这样明显的打字错误可以不晚于当用户退出PreferenceActivity时删除。 我想获得有关清理用户偏好的好方法。

+0

是否调用TRIM()上的所有用户的输入是否行得通呢? – hovanessyan 2012-02-22 13:57:50

回答

3

只需在用户提供的值上使用String.trim(),然后将它们保存为首选项。 trim()方法从输入字符串的前面和后面删除所有空白字符。

http://developer.android.com/reference/java/lang/String.html#trim()

+1

谢谢你的建议。我希望你能为我澄清一些事情。因为我正在使用PreferencesActivity,所以我并不主动保存每个偏好值。在PreferencesActivity和xml文件的组合中,必须以某种方式将保存隐藏在抽象层中。那么,你如何建议我访问首选项的每个值以执行String.trim()? – Jbruntt 2012-02-22 14:13:45

+2

啊我看到了,对不起,我错过了。我会扩展EditTextPreference来构建自己的TrimmedEditTextPreference并覆盖setText()来执行trim()http://developer.android.com/reference/android/preference/EditTextPreference.html – 2012-02-22 14:27:04

+0

为了尝试您的建议,我创建了一个新类:公共类TrimmedEditTextPreference扩展EditTextPreference。它现在包含三个构造函数。我还没有开始看过setText()。在我的preferences.xml中,我已经将其中一个条目从EditTextPreference类型更改为TrimmedEditTextPreference。当我在模拟器中运行应用程序并打开首选项时,它强制关闭。在logcat中,我得到java.lang.ClassNotFoundException:在加载器中的android.preference.TrimmedEditTextPreference [email protected] – Jbruntt 2012-02-23 07:01:21