【发布时间】:2021-03-13 05:19:58
【问题描述】:
我正在 Kotlin 中开发一个 Android 应用程序,我想在其中将“位置”对象保存到 SQLite 然后恢复稍后。我可以通过简单地在“Location”对象上调用“toString()”来将“Location”对象转换为“String”,如下所示:
var loc:Location
var str:String
... Code to init loc ...
str = loc.toString
String 之后有一个值,例如:
str = Location[gps 37.328528,-121.897877 hAcc=8 et=+1d15h4m55s443ms alt=-6.62762451171875 vel=0.36 bear=264.9 vAcc=17 sAcc=3 bAcc=97 {Bundle[mParcelledData.dataSize=96]}]
然后如何将生成的字符串转换回位置对象
更新 #1 这是我根据@DivijGupta 的建议使用 Gson 的尝试
constructor(i_productName: String, i_date:String, i_location:Location?)
{
var parcel:Parcel?=Parcel.obtain()
var locStr:String = ""
var longitude:Double
if(i_location!=null) {
logEntryAction = i_productName
logEntryDate = i_date
longitude = i_location.longitude
locStr = Gson().toJson(i_location) <----- Gson
}
else
{
longitude = 0.0
}
logEntryLongitude = longitude
【问题讨论】:
-
从 Location 对象创建 Json 对象并将其转换回位置。您不能将
toString输出更改为对象,它的存在只是为了便于阅读 -
您需要
Location对象吗?或者可能具有高度和/或准确性的位置?您可以将纬度、经度另存为double在 2 个单独的列中。 -
@JanKubovy 正如我在问题中所说,我正在寻找一个“位置对象”。最好是精确的副本,而无需手动保存和重新加载每个字段。
-
有人能告诉我为什么我被否决了吗?我是 stackoverflow 的新手,正在尝试正确使用它,但我不知道在这种情况下我做错了什么。
-
我知道。
Location对象与位置提供者关系密切,并且有一些内部(我没有探索),这使其不适合序列化/反序列化。这就是为什么我建议只存储相关属性。根据您想对该位置做什么,您可以稍后使用其他对象进行操作(例如developers.google.com/maps/documentation/javascript/reference/…)。您能否澄清一下您以后打算如何处理恢复的对象?
标签: android kotlin serialization type-conversion