无法从存储中保存和检索 Double
Unable to save and retreive Double from storage
我总是遇到这个错误java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
val sharedPreferences = getSharedPreferences("prefs", MODE_PRIVATE)
val editor = sharedPreferences.edit()
var myLongitude = 36.892672
editor.putDouble("longitude", myLongitude)
editor.apply()
错误来自这里:
val savedLongitude : Double = sharedPreferences.getDouble("longitude", 0.0)
我有这些方法:
fun SharedPreferences.Editor.putDouble(key: String, double: Double) =
putLong(key, java.lang.Double.doubleToRawLongBits(double))
fun SharedPreferences.getDouble(key: String, default: Double) =
java.lang.Double.longBitsToDouble(getLong(key, java.lang.Double.doubleToRawLongBits(default)))
我的目标是将双精度值保存到 SharedPref,然后检索它
您可以使用很多优雅的方法。 这是 java 的变体。但是如果你使用 kotlin,你可以使用扩展来让它更清晰。
Kotlin 扩展方式(比使用奇怪的实用程序 类 或其他任何东西更漂亮)
fun SharedPreferences.Editor.putDouble(key: String, double: Double) =
putLong(key, java.lang.Double.doubleToRawLongBits(double))
fun SharedPreferences.getDouble(key: String, default: Double) =
java.lang.Double.longBitsToDouble(getLong(key, java.lang.Double.doubleToRawLongBits(default)))
enter link description here
这样做是为了将双倍值存储到首选项
final Editor editor = getPreferences().edit();
editor.putLong(key, Double.doubleToRawLongBits(value));
editor.apply();
Double.doubleToRawLongBits() 是
Returns a representation of the specified floating-point value
according to the IEEE 754 floating-point "double format" bit layout,
preserving Not-a-Number (NaN) values.
要从首选项中获得双倍价值,请使用此
Double.longBitsToDouble(getPreferences().getLong(key, Double.doubleToLongBits(defValue)));
我总是遇到这个错误java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
val sharedPreferences = getSharedPreferences("prefs", MODE_PRIVATE)
val editor = sharedPreferences.edit()
var myLongitude = 36.892672
editor.putDouble("longitude", myLongitude)
editor.apply()
错误来自这里:
val savedLongitude : Double = sharedPreferences.getDouble("longitude", 0.0)
我有这些方法:
fun SharedPreferences.Editor.putDouble(key: String, double: Double) =
putLong(key, java.lang.Double.doubleToRawLongBits(double))
fun SharedPreferences.getDouble(key: String, default: Double) =
java.lang.Double.longBitsToDouble(getLong(key, java.lang.Double.doubleToRawLongBits(default)))
我的目标是将双精度值保存到 SharedPref,然后检索它
您可以使用很多优雅的方法。 这是 java 的变体。但是如果你使用 kotlin,你可以使用扩展来让它更清晰。
Kotlin 扩展方式(比使用奇怪的实用程序 类 或其他任何东西更漂亮)
fun SharedPreferences.Editor.putDouble(key: String, double: Double) =
putLong(key, java.lang.Double.doubleToRawLongBits(double))
fun SharedPreferences.getDouble(key: String, default: Double) =
java.lang.Double.longBitsToDouble(getLong(key, java.lang.Double.doubleToRawLongBits(default)))
enter link description here
这样做是为了将双倍值存储到首选项
final Editor editor = getPreferences().edit();
editor.putLong(key, Double.doubleToRawLongBits(value));
editor.apply();
Double.doubleToRawLongBits() 是
Returns a representation of the specified floating-point value according to the IEEE 754 floating-point "double format" bit layout, preserving Not-a-Number (NaN) values.
要从首选项中获得双倍价值,请使用此
Double.longBitsToDouble(getPreferences().getLong(key, Double.doubleToLongBits(defValue)));