如何在HERE SDK Navigate Edition(4.13.2.0)中序列化保存Route实例
新版HERE SDK Navigate Edition的com.here.sdk.routing.Route类提供了官方原生的序列化/反序列化方法,不用依赖Gson这类第三方工具,具体实现如下:
保存Route实例
用Route自带的serialize()方法把Route转成字节数组,再转成Base64字符串就能存入SharedPreferences了:
// 将Route序列化为字节数组 val routeBytes = route?.serialize() ?: byteArrayOf() // 转成Base64字符串方便存储 val routeBase64 = Base64.encodeToString(routeBytes, Base64.DEFAULT) // 写入SharedPreferences SharedPrefs.edit().putString(PREFS_ROUTE_KEY, routeBase64).apply()
读取并还原Route实例
从SharedPreferences取出Base64字符串,解码成字节数组后,用Route.deserialize()方法还原Route:
val routeBase64 = SharedPrefs.getString(PREFS_ROUTE_KEY, null) ?: return val routeBytes = Base64.decode(routeBase64, Base64.DEFAULT) // 反序列化得到Route实例 val route = Route.deserialize(routeBytes)
几点要注意的地方
- 一定要用SDK自带的这两个方法,官方维护的兼容性更可靠,别再用Gson硬转了——Route类没有暴露足够的可序列化字段,Gson转出来的内容根本没法正常还原出可用的Route实例。
- 序列化后的字节数组只保证在同一个SDK版本里能正常反序列化,跨版本使用大概率会出错。如果需要长期存储或者跨版本兼容,建议存Route的途经点、起点终点坐标这些关键参数,之后用这些参数重新规划路线,比直接存Route实例靠谱。
内容的提问来源于stack exchange,提问作者Serggio Lysenko
相关产品推荐
相关产品推荐

