如何从SharedPreferences(Android)返回一个double

时间:2014-03-23 10:01:47

标签: java android double sharedpreferences

我显然没有足够的声誉来添加评论并请求澄清某个主题,因此我将不得不在此处重新添加问题。

根据链接: Can't put double SharedPreferences

评分最高的答案是从共享偏好中返回双精度的最佳方式:

double getDouble(final SharedPreferences prefs,
                 final String key, final double defaultValue) {
    return Double.longBitsToDouble(prefs.getLong(key, Double.doubleToLongBits(defaultValue)));
}

我无法确定参数defaultValue的内容。这个参数应该是一个变量(如双精度型),原始值是吗?这是我班上独一无二的吗?它是什么?

如果可能,有人会介意给出一个例子,这样我可以更好地理解它吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

defaultValue是没有将此键定义为" key"在共享pref中,例如,如果您是第一次检索数据而您没有为您的密钥写一个值,它将返回defaultValue。

double getDouble(final SharedPreferences prefs, final String key, final double defaultValue)
{ return Double.longBitsToDouble(prefs.getLong(key, Double.doubleToLongBits(defaultValue)));}

假设您已将542.3放入myDouble

getDouble("myDouble" , 5.0); // will return 542.3

但是如果你还没有把任何东西放进myDouble

getDouble("myDouble" , 5.0); // will return 5

常见的用途是跟踪数据,用户可以清除数据(想象一下游戏中的高分),这样你就不想检查它是否存在,而是用默认值启动它

getDouble("highscore" , 0.0); // will return highscore if exists otherwise will return 0

答案 1 :(得分:1)

将首选项设置为获取字符串....

latitude = location.getLatitude();
longitude = location.getLongitude();

//save last valid position
String mLastLatitude = latitude.toString();
myPreferences.setLastLatitude(mLastLatitude);

String mLastLongitude = longitude.toString();
myPreferences.setLastLongitude(mLastLongitude);

//get last position 
lastLatitude = Double.valueOf(myPreferences.getLastLatitude());
lastLongitude = Double.valueOf(myPreferences.getLastLongitude());