Closed rayzeng0221 closed 1 year ago
var globalMac = ""
var userInfoId = ""
var sceneMusic: Boolean by serialLazy(true, name = "scene_music_${globalMac}_${userInfoId}")`
// 写入
binding.cardWriteField -> {
// name = "https://github.com/liangjingkanji/Serialize"
//toast("写入数据: $name 到磁盘")
globalMac = "C300000030A1"
userInfoId = "1647308209"
sceneMusic = false
Log.i("zy1997", "onClick: 写入之后的值是---${sceneMusic}")
}`
// 读取
binding.cardReadField -> {
//toast("读取本地数据为: $name")
globalMac = "CE3431345450"
//userInfoId = "1647308209"
//sceneMusic = false
Log.i("zy1997", "onClick: 写入之后的值是---${sceneMusic}")
}
上面这段代码 是我 直接在你的Demo里面复现 的 也是一样
我现在暂时把它改成这样手机读写就是正常的,但是这样,我所有的 都得改,成本太大了,那我上面那个写法 要怎么才可以正常呀?
原因: serialLazy
对值进行缓存了
Serialize.hook
拦截配置和序列化, 示例文档by serialLazy
默认值没有隔绝的问题你可以暂时换成by serial
来解决, 其并不会缓存数据, 该问题我会马上开始进行修复(但我工作繁忙)同时我建议迁移使用自定义序列化来存储数据, 因为默认Serialize/Parcelable
等方式无法很好的兼容字段变更
没用哦,早上已经试过了,都是一样的 。
var sceneMusic: Boolean by serial(true, name = "scene_music_${globalMac}_${userInfoId}")
使用的最新版本吗?
使用的最新版本吗?
是啊,而且我还是直接在你的 Demo里面改的
当我第一次改变他的值为false 接着 我改变 动态键名的 变量的值,这时候再去读取值,动态键名变量已经改了,这时候读取的不应该是默认值true吗?但是读取出来的 还是 上一个动态键名的 值 false