Android 当用户更新应用程序时,如何更新共享优先权数据?
我只是想知道,假设我在android应用程序中存储了一些东西,例如在共享首选项中,假设当前版本的应用程序是Android 当用户更新应用程序时,如何更新共享优先权数据?,android,version-control,sharedpreferences,Android,Version Control,Sharedpreferences,我只是想知道,假设我在android应用程序中存储了一些东西,例如在共享首选项中,假设当前版本的应用程序是n,在更新版本(n+1),我将共享首选项对象的数据类型从列表更改为列表,在下一个更新版本中,即(n+2)我已经将对象的数据类型更新为列表,现在用户将去play store更新他/她的应用程序,那么以前的数据将在那里,因此我必须自己编写一些代码,如果以前的版本是n,而当前的版本是例如-(n+2)现在,我将通过编写if else来检查什么是旧版本,从而相应地更改代码中共享前缀的值 以上是开发者在
n
,在更新版本(n+1)
,我将共享首选项对象的数据类型从列表更改为列表
,在下一个更新版本中,即(n+2)
我已经将对象的数据类型更新为列表
,现在用户将去play store更新他/她的应用程序,那么以前的数据将在那里,因此我必须自己编写一些代码,如果以前的版本是n
,而当前的版本是例如-(n+2)
现在,我将通过编写if else
来检查什么是旧版本,从而相应地更改代码中共享前缀的值
以上是开发者在playstore上更新任何android应用程序时使用的方法吗
此外,是否有任何可能性,例如用户当前安装了我的应用程序的(n+2)
版本,现在用户希望下载我的应用程序的任何较旧版本,例如n
,现在是否有可能用户能够安装此版本的n
应用程序,同时恢复版本(n+2)
,因为如果发生这种情况,那么在我的版本n
code中,将不会有if-else
将对象的数据类型从List
更改为List
我是一个新手,从来没有在playstore上安装过任何应用程序,但我会去,这就是为什么我会这么问
谢谢如果我要完全更改属于某个首选项的对象类型,并且我要将其发布到产品中,我只需更改我使用的键,以避免有条件地更新它的麻烦。但这真的根本不应该发生。如果您要彻底更改,用户不管你怎么处理,你都不会高兴的
要回答第二个问题,您不能直接将Android应用程序从versionCode 3降级为versionCode 2。唯一的方法是首先卸载当前版本,从而清除所有共享引用,然后安装旧版本。如果您使用Google提供的备份功能,首选项可能是还原d、 这让我回到我的第一点:如果你想改变那么多,只需改变你正在使用的钥匙
(Google Play不允许用户因为我描述的原因而降级。它将为用户提供与其设备兼容的最新版本。)如果我要完全更改属于某个首选项的对象类型,并将其发布到生产环境中,我只需更改我使用的键,以避免有条件地更新它的麻烦。但这实际上根本不是应该发生的事情。如果更改得如此剧烈,用户不会感到失望不管你怎么处理,都会很开心
要回答第二个问题,您不能直接将Android应用程序从versionCode 3降级为versionCode 2。唯一的方法是首先卸载当前版本,从而清除所有共享引用,然后安装旧版本。如果您使用Google提供的备份功能,首选项可能是还原d、 这让我回到我的第一点:如果你想改变那么多,只需改变你正在使用的钥匙
(Google Play不允许用户因为我描述的原因而降级。它将为用户提供与其设备兼容的最新版本。)
不要担心降级场景,因为Google Play不支持它。即使用户手动尝试降级(即您直接共享用户.apk),共享的首选项也将被清除
共享首选项没有迁移逻辑,就像我们对数据库的迁移逻辑一样,所以这必须手动完成
我的建议是使用不同的键,而不是查看if else
。始终这样做,因为我更喜欢保持代码干净,而不是共享首选项文件
不要担心降级场景,因为Google Play不支持它。即使用户手动尝试降级(即您直接共享用户.apk),共享的首选项也将被清除
共享首选项没有迁移逻辑,就像我们对数据库的迁移逻辑一样,所以这必须手动完成
我的建议是使用不同的键,而不是查看if else
。始终这样做,因为我更喜欢保持代码干净,而不是共享首选项文件
如果您只想更改键,那么您还必须编写逻辑以将以前的键值插入新键,并且为此您必须编写If else
?@sudhanshugar如果您要完全更改该键中的对象类型,那么您无论如何都不应该保留该值。抱歉,我的意思是完全可以c将旧值转换为新值,例如,起初我将金额存储为string
,但现在我将金额存储为double
?为什么要这样做?string已经可以封装一个double值,即使这不是最有效的方法,也不会限制您。在应用程序投入生产后将其更改为使用double我的意思是,例如,实际的实现是假设我在共享首选项中存储我朋友的唯一id,因此当前我实现的数据类型是列出朋友id
,现在假设我还必须为我存储的每个朋友id插入名称,现在对于这种情况,我的新数据类型将是List friends
其中friends将是一个由用户id
以及名称
组成的类,现在您可以看到这一点