在onLocationChanged事件中,我想保存我的GPS路线(纬度,经度).后来我想加载这些数据并绘制路线.
通过使用某种数组类型(并使用数据库保存或加载)或XML文件或其他内容,谁是最好的方法?
谢谢.
Jua*_*n T 71
在SharedPreferences中存储双值而不会丢失精度的最佳方法是:
转换为位表示以将其存储为long:
prefsEditor.putLong("Latitude", Double.doubleToLongBits(location.getLatitude()));
Run Code Online (Sandbox Code Playgroud)要检索,从位表示转换为double:
double latitude = Double.longBitsToDouble(prefs.getLong("Latitude", 0);
Run Code Online (Sandbox Code Playgroud)但是,我认为如果你想存储大量的点比使用SQLite数据库更好,而不是保存SharedPreferences中的键值对中的每个坐标,或者用XML序列化数组并将其写入文件或SharedPreferences.数据库为您提供的优势是只在内存中加载您在地图中显示的区域内的点,这样您就可以节省内存.
Ree*_*eed 11
如果我错了,请纠正我,但将双值转换为字符串可能会更好,然后无论何时调用它们都会将它们转换回双精度数.听起来很痛苦,但是oracle的网站(http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html)说:
"如果需要在大型浮点数数组中保存内存,请使用float(而不是double).这种数据类型绝不能用于精确值,例如货币"
prefEditor.putString("Latitude", Double.valueOf(loc.getLatitude()).toString());
Run Code Online (Sandbox Code Playgroud)
然后,调用该值
String latitudeString = pref.getString("Latitude", "0");
double latitude = Double.parseDouble(latitudeString);
Run Code Online (Sandbox Code Playgroud)
它看起来似乎更令人讨厌,但似乎也更有可能返回你保存的确切值,而不是略微偏离.我想这取决于你需要多么准确的价值.
虽然,就使用数组而言,我是无能为力的,因为我从来不需要使用它们并且没有经验.
| 归档时间: |
|
| 查看次数: |
24557 次 |
| 最近记录: |