我正在清理一些非常舊的應用程序中的一些錯誤編碼選項。在我做的第一個應用程序中,有一個用戶登錄。所以,我用SharedPreferences
來存儲user_id
。這應該是一個long
一直。不幸的是,我最初將它存儲爲String
。更改已存在的SharedPreference值中的數據類型
我回去糾正這個問題。然而,我當然得到ClassCastException
,因爲我試圖將String
作爲long
。
這是它如何工作後進行更改我的代碼:
public static void setLoggedInUserId(Context ctx, long id) {
Editor editor = getSharedPreferences(ctx).edit();
editor.putLong(PREF_LOGGEDIN_USER_USERID, id);
editor.apply();
}
public static long getLoggedInUserId(Context ctx) {
// need to handle String to long conversion here?
return getSharedPreferences(ctx).getLong(PREF_LOGGEDIN_USER_USERID, 0);
}
什麼是處理這個問題最徹底的方法,因此儘可能透明給用戶(我不希望強制如果可能,退出)。
編輯
由於我打字,是一個好的解決辦法?
return Long.valueOf(getSharedPreferences(ctx).getString(PREF_LOGGEDIN_USER_USERID, 0));
一個問題:這隻會工作的第一次要解決舊數據;因爲在此之後,基於setter方法的偏好將是long
。
下一個最佳選擇:我可以測試存儲在preference
中的類型,可能是typeof
?
工作很好;謝謝... – KickingLettuce