2015-12-14 82 views
0

我有一個值保存在SharedPreferences這是一個float。我在一些設計更改後嘗試將其保存爲int,但我獲得ClassCastException。當我嘗試加載此值時引發異常。我可以安全地更改SharedPreferences變量的類型嗎?

出錯行:preferences.getInt(myKey, myDefaultValue)

這是一個從改變:preferences.getFloat(的myKey,myDefaultValue)`

有沒有從該密鑰加載和覆蓋該值,而不必清除安全的方式我緩存?或者我需要創建一個全新的密鑰?

+0

你可以得到的浮動,然後將它轉換成int,但將在將來的版本中不需要,因爲您已經更改設計,刪除應用程序或清除數據。 – Gonzalo

+0

@Gonzalo問題是,如果應用程序已經發布,我不希望每個用戶都卸載,然後重新安裝應用程序,或清除他們的緩存,然後再次使用應用程序 –

+0

對不起,我以爲你在調試,尚未公佈。 – Gonzalo

回答

4

您應該首先從偏好中刪除該值。

呼叫

Editor.remove(String key); 

,然後設置你的價值。

這也取決於你想達到的目標。如果你試圖在設置中存儲'int',然後在那裏存儲'float',然後再'int',那麼答案是否定的,千萬不要這麼做!

如果你只是在開發過程中改變了變量類型的任何生產之前,那麼你可以清除應用數據,並無需清除它的代碼與新的變量。

但如果你已經部署了你的應用程序,現在要更改變量的類型,那麼,你可以做到這一點,並使用一個.remove()方法。

+0

那麼,爲Shared Shared創建新密鑰並放棄舊密鑰的正確解決方案是什麼? –

+0

@h_k,這取決於你想達到的目標。如果你正試圖在設置中存儲int,然後在那裏存儲一個浮點數,然後再int,那麼答案是NO,不要這麼做! – geNia

+0

保存到首選項的值始終是浮點數。但現在我想切換到一個整數,而不是將來的版本。 –

1

在我的情況下我的應用程序已經發布,無法改變舊型SharedPreference我不得不圍繞一個try-catch呼籲ClassCastException

相關問題