liangjingkanji / Serialize

🍒 Android 简单高性能读写本地数据, 直接存储对象/基础类型
http://liangjingkanji.github.io/Serialize/
Apache License 2.0
239 stars 20 forks source link

App版本升级后,所有数据全没了 #24

Closed rayzeng0221 closed 1 year ago

rayzeng0221 commented 1 year ago

开始我还以为 是我代码问题,反复确认了好多遍问题还是出在 这个本地存储上,我的登录状态是是用这个来保存的 但是版本升级覆盖安装后,好像所有保存的值全没了,本来登录过了,覆盖安装后又重新进入了登录页面

liangjingkanji commented 1 year ago

你使用了SerializeHook自定义?

rayzeng0221 commented 1 year ago

var token: String? by serialLazy() 判断登录状态 就只是简单存储了 Token 不覆盖安装都没有问题的 就是 比如从1.1 升级到 1.2 之后 就全没了 包括其他的 状态值

liangjingkanji commented 1 year ago

重启app不会丢失数据是吗?我说的杀死任务那种

rayzeng0221 commented 1 year ago

我是直接上传了两个版本到蒲公英 然后用浏览器把低版本和高版本分别下载到本地 然后先安装 低版本,进行登录和其他一些操作之后,保证那些状态值都被改变,包括登录的用户名密码也保存了 ,然后再安装高版本,然后安装成功之后,就啥也没了,保存的 用户名密码,Token 都没了

rayzeng0221 commented 1 year ago

是的 ,杀进程 啥的 重启是没有任何问题的

rayzeng0221 commented 1 year ago

就是 版本升级 覆盖安装就这样了

liangjingkanji commented 1 year ago

能用本仓库demo复现问题吗?

rayzeng0221 commented 1 year ago

跟我的 多Module 开发 会有影响吗 那我晚上 回去试一下你的 Demo

liangjingkanji commented 1 year ago

你用的框架什么版本

rayzeng0221 commented 1 year ago

1.3.2

liangjingkanji commented 1 year ago

完全无法复现你的问题, 我推测你可能为调用了token = null导致删除了本地数据

建议多检查下代码

另外推荐使用2.0.0版本的SerializeHook并且使用kotlin.serialization来处理序列化(参考示例项目), 可以避免存储对象时字段增删导致无法正确读取数据

rayzeng0221 commented 1 year ago

我刚刚发现了一个很奇怪的事情,版本之间 设计存储的字段基本没有新增也没有改动,但是好像项目代码有更新,就会出现这个情况,昨天那一份同样的代码,只是版本号不一样,打了两个版本测试升级就是正常的,但是跟之前的版本如果代码上有改动去升级 就会出现了。实在是太奇怪了。而且你说的Token的问题 除了退出登录的时候 是直接把Token=”“,而且升级也不会有地方去改变这个值的

liangjingkanji commented 1 year ago

我刚刚发现了一个很奇怪的事情,版本之间 设计存储的字段基本没有新增也没有改动,但是好像项目代码有更新,就会出现这个情况,昨天那一份同样的代码,只是版本号不一样,打了两个版本测试升级就是正常的,但是跟之前的版本如果代码上有改动去升级 就会出现了。实在是太奇怪了。而且你说的Token的问题 除了退出登录的时候 是直接把Token=”“,而且升级也不会有地方去改变这个值的

demo你也无法复现此问题是吧? 那我建议你直接使用mmkv的方法读写一个字段试试

rayzeng0221 commented 1 year ago

嗯,后续我再跟进一下,等我修复一些Bug后 在打包一个版本看看是不是代码更新就会导致这个问题

liangjingkanji commented 1 year ago

难道是MMKV.initlizae()你指定的目录问题吗? 你可以看下Serialize源码, 这个框架文档都比源码多, 本质上只是一些简单的mmkv封装, 委托属性的应用示例, 旨在简化读写和对象存储

rayzeng0221 commented 1 year ago

我就只是集成了你这个库,没有设置过MMKV的任何方法呢。然后 数据线直接代码运行 安装 去升级也是没有问题的 安装release版本就会这样

liangjingkanji commented 1 year ago

我使用demo的release包复现不出来此问题, 而且这个也不止你我一个人使用

你看下是否是这个问题 Duplicate of #14, 但是我看你的数据类型为String应该不至于

liangjingkanji commented 1 year ago

标错了, 可能重复问题是 #14

rayzeng0221 commented 1 year ago

我除了用户信息 是用了实体保存,其他的 全是 基础数据类型。然后我昨天修改一些Bug之后,升级又是正常的了 ,我真不知道 前面那几个版本到底是怎么回事 ,真的是很郁闷啊 。

liangjingkanji commented 1 year ago

可能是移动了字段类所在的文件路径

liangjingkanji commented 1 year ago

最新版本添加@SerializeConfig注解解决类重命名问题

@SerializeConfig(mmapID = "app_config") // 指定mmapID可以避免重命名当前类名或者改变包名导致无法读取旧值
object AppConfig {
    var userId: String by serialLazy(name="user_id") // 指定name可以避免重命名当前字段导致无法读取旧值
}
liangjingkanji commented 1 year ago

长时间没有复现问题本issues将被关闭