Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当用户更新应用程序时,如何更新共享优先权数据?_Android_Version Control_Sharedpreferences - Fatal编程技术网

Android 当用户更新应用程序时,如何更新共享优先权数据?

Android 当用户更新应用程序时,如何更新共享优先权数据?,android,version-control,sharedpreferences,Android,Version Control,Sharedpreferences,我只是想知道,假设我在android应用程序中存储了一些东西,例如在共享首选项中,假设当前版本的应用程序是n,在更新版本(n+1),我将共享首选项对象的数据类型从列表更改为列表,在下一个更新版本中,即(n+2)我已经将对象的数据类型更新为列表,现在用户将去play store更新他/她的应用程序,那么以前的数据将在那里,因此我必须自己编写一些代码,如果以前的版本是n,而当前的版本是例如-(n+2)现在,我将通过编写if else来检查什么是旧版本,从而相应地更改代码中共享前缀的值 以上是开发者在

我只是想知道,假设我在android应用程序中存储了一些东西,例如在共享首选项中,假设当前版本的应用程序是
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
    以及
    名称
    组成的类,现在您可以看到这一点