2012-02-22 45 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