应用程序更新后共享首选项丢失

2023-11-23

我一整天都在研究这个问题。以下是要点:

  • 共享首选项should当用户更新应用程序时保持持久性
  • 就我而言,更新应用程序后,它们丢失了
  • 这个问题每次都会重现(我从 Play 商店安装旧的 APK,然后adb install -r new.apk使用新的(更新、签名、版本代码递增)APK)

8小时后

为了进行测试,我更改了 SharedPrefs 文件名new.apk (SP2.xml)并且更新后,旧的 SharedPrefs 文件来自old.apk (SP.xml) 被删除了!这是 adb shell 输出:

  1. adb install old.apk

  2. adb shell "su -c 'ls /data/data/com.pkg.name/shared_prefs'": CRC.xml

  3. adb install -r new.apk

  4. adb shell "su -c 'ls /data/data/com.pkg.name/shared_prefs'": CRC2.xml(CRC.xml 丢失!)

我的 SharedPreferences 单例类(初始化:SharedPrefs.init(getApplicationContext());):

public final class SharedPrefs {
    private static SharedPrefs sp;

    private SharedPrefs() {
    }

    public static void init(Context context) {
        if (sp == null)
            sp = context.getSharedPreferences("CRC2", Context.MODE_PRIVATE);
    }

    public static void saveString(String name, String value) {
        sp.edit().putString(name, value).apply();
    }

    public static String getString(String key, String defaultValue) {
      sp.getString(key, defaultValue);
    }
    ...
}

所以基本上我失去了 SharedPreferences 并且我不知道为什么。请帮忙,欢迎任何提示!


如果您更改了清单文件的应用程序部分中的属性,则会发生此错误,并且 90% 的情况下,共享首选项数据将被重置。这是我在 Play 商店应用程序顶部安装签名 apk 的测试中发现的。不确定如果该应用程序是从 Play 商店作为更新安装的,会发生什么,但我很确定在这种情况下数据也会丢失。

编辑-我重新发布了该应用程序并进行了多次测试。这其实就是问题所在。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用程序更新后共享首选项丢失 的相关文章

  • 如何从 SDK 实现每个会话的 Google Places 自动完成功能?

    是否可以从 Android 和 iOS 应用程序的 place sdk 实现基于会话的自动完成 根据 6 月 11 日生效的新 Google 地图框架定价 对自动完成的请求可以分为基于击键 会话的请求 我找不到描述实施步骤的文档 除了这个参
  • android edittext中的字符映射

    我想让我的编辑文本就像我写字符 g 时一样 它是相关的映射自定义字符应该写成印地语中的 我认为应该有字符映射 但没有知识任何人都可以帮助我 怎么做 其他应用程序https play google com store apps details
  • 我在布局上看不到任何 FirebaseRecyclerAdapter 项目

    我试图将数据从 Firebase 数据库检索到我的布局 但我看不到任何项目FirebaseRecyclerAdapter在布局中 请帮忙 我按照一个教程展示了如何做到这一点 当我运行应用程序时 我没有看到任何项目 但我可以滚动 public
  • Xamarin Android Webview Javascript

    我正在尝试通过 Xamarin for Android 创建一个移动应用程序 它有一个显示网站的 WebView 问题是正常按钮会触发 但 javascript 事件不会触发 我已经启用了 Javascript 但没有运气 如何在 Andr
  • 如何正确释放Android MediaPlayer

    我正在尝试向我的 Android 应用程序添加一个按钮 当点击该按钮时它会播放 MP3 我已经让它工作了 但没有办法释放 mediaPlayer 对象 因此即使在我离开活动后它仍然会继续播放 如果我在react 方法之外初始化MediaPl
  • 如何在 Linux 内核中定义并触发我自己的新软中断?

    我想在 Linux 内核中创建自己的软中断 这是正确的方法吗 In the init我想触发该模块的softirq我将添加一个调用 394 void open softirq int nr void action struct softir
  • Recyclerview 动态部分不使用任何第三个库

    我想将标头添加到 recyclerview 我正在尝试使用来实现它 Override public int getItemViewType int position depends on your problem if position 0
  • Bitmap.getPixels() 中的 IllegalArgumentException

    我想将数据从位图复制到int using getPixels 这是我当前的代码 int pixels new int myBitmap getHeight myBitmap getWidth myBitmap getPixels pixel
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • 如何更改终端的默认目录?

    我想更改 Android Studio v2 2 2 终端的默认目录 当我打开终端时 它基于项目的目录 C 项目路径 我经常需要使用adb shell 所以我必须导航到 SDK 路径 平台工具 才能使用 adb 命令 是否可以更改终端的默认
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • Android - AudioRecord类不读取数据,audioData和fftArray返回零

    我是 Android 新手 一直在开发音调分析器应用程序 最低 SDK 8 我读了很多关于如何实现 Audiorecord 类的文章 但我想知道为什么它在我录制时不读取任何数据 我尝试显示 audioData 和 fftArray 的值 但
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • Android 中如何通过彩信发送图片?

    我正在开发多媒体应用程序 我正在通过相机捕获一张图像 并希望将该图像和文本发送到其他号码 但我不知道如何通过彩信发送图像 MMS 只是一个 http post 请求 您应该使用执行请求额外的网络功能 final ConnectivityMa
  • Android 如何将总天数准确更改为年、月、日?

    我正在做一个应用程序 该应用程序与根据给定的生日日期输入获取一个人的年龄有关 为此 我从下面的代码中获取从该日期到当前日期的总天数 String strThatDay 1991 05 10 SimpleDateFormat formatte
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 通过电子邮件发送文本文件附件

    我正在尝试附加一个文本文件以便通过电子邮件发送 但每当我打开电子邮件应用程序时 它都会说该文件不存在 请帮助 Intent i new Intent Intent ACTION SEND i setType text plain i put
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • Android 屏幕方向错误

    我使用的是 Android HTC HERO 2 1 版本 我写的活动
  • Git 实验分支还是单独的实验存储库?

    我正在开发一个 Android 应用程序 并且在整个开发周期中一直使用 Git 现在 我想构建并发布实验性功能 供人们尝试和安装 同时仍将原始的 稳定的应用程序安装在他们的设备上 现在 这意味着我需要使用不同的包名称 这会更改开发项目中的一

随机推荐

  • iOS 应用程序验证错误:缺少 plist 密钥 CFBundleShortVersionString

    我用 SpriteBuilder 和 cocos2d 构建了一个 iOS 游戏 当我尝试将其提交到 AppStore 时 出现以下错误 错误 ITMS 9000 缺少 plist 密钥 Info plist 文件缺少所需的密钥 CFBund
  • Python 中返回 NoneType 的函数? [复制]

    这个问题在这里已经有答案了 在从事 CS1 的 Python 项目时 我遇到了一个我和我的室友都无法解决的奇怪问题 代码的一般范围是使用数字填充具有一定大小的形状的 0 网格来填充空间 并且我们必须一路检查以确保我们没有将形状放置在已经有形
  • JQuery JSTree - 添加工具提示

    有没有办法添加一个Tooltip to a JSTree节点 我想当用户将鼠标悬停在元素上时显示额外的信息 我对 JQuery 非常了解 所以对此可能有一个明显的答案 编辑 感谢下面的 zzzz 我能够弹出一个简单的悬停框 尽管将树的div
  • 如何检查div是否有id?

    div div class ui droppable one div div class ui droppable two div div class ui droppable three div div class ui droppabl
  • 创建 javadoc 时发生致命错误(无法找到包 java.lang)

    我尝试在 Linux 下使用 Eclipse Kepler 在我的 java 项目中运行 javadoc 但收到此错误 Constructing Javadoc information com sun tools javac util Fa
  • 我应该尽可能使用并行流吗?

    使用 Java 8 和 lambda 可以轻松地将集合作为流进行迭代 并且使用并行流也同样容易 两个例子来自the docs 第二个使用并行流 myShapesCollection stream filter e gt e getColor
  • 在 Sphinx 文档中保留包装/修饰的 Python 函数的默认参数

    我该如何更换 args and kwargs带有装饰函数文档中的真实签名 假设我有以下装饰器和装饰函数 import functools def mywrapper func functools wraps func def new fun
  • 为什么将条件应用于 IAM 策略中的 ec2:DescribeInstances 会失败?

    当尝试配置可以使用策略列出哪些实例时 我注意到以下问题 当条件未实现时 所有实例都是可见的 当任何条件被实现时 什么都看不到 包含有条件的示例策略 Version 2012 10 17 Statement Sid Stmt146123588
  • 访问 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData

    谁能告诉我为什么我无法访问注册表项 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows CurrentVersion Installer UserData 如果我查询GetSubKeysNames o
  • 优化 Jinja2 环境创建

    我的应用程序在 Google App Engine 上运行 由于 CPU 使用率高 大多数请求不断收到黄色标记 使用探查器 我将问题追溯到创建的例程jinja2 Environment实例 我正在模块级别创建实例 from jinja2 i
  • 为什么在 Intellij 中使用 Android SDK 时缺少 Android AVD Manager?

    I am trying to use the Android SDK in my IntelliJ project that is a larger project containing both web and ios clients a
  • Numpy:作为 Matlab 进行赋值和索引

    有时 分配仅具有一个索引的数组很有用 在 Matlab 中这很简单 M zeros 4 M 1 5 end 1 M 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Numpy 有没有办法做到这一点 首先 我想展平数组 但该操
  • 最适合拼写检查器、字典和同义词库的算法和数据结构

    实施的最佳方式 字典 有没有比 Trie 更好的 DS 字典 同义词库 不知道 因为匹配的是单词的含义 相似的含义 拼写检查器 比哈希映射更好的东西 如果可能的话 提供正确的拼写建议 当在一小时的面试中被问到 我们是否需要为算法编写 c c
  • Android 搜索:使用 FTS 表以及普通 SQLite DB 表

    这更多的是一个设计问题 而不仅仅是一个编码问题 我已经有一个将数据存储在 SQLite DB 表中的应用程序 现在我想添加搜索功能 据我了解 为了启用搜索功能 我需要 FTS 表 我拥有的表格是 不完全相同 但给出了非常相似的示例 内容表
  • Android 音频:改变音调

    SoundPool 的 Android 文档称 该应用程序还可以通过实时调整多普勒或合成效果的播放速率来改变音调 所以我尝试这样做 使用 setRate 方法从一个音符平滑地变化到另一个音符 但结果很糟糕 声音变化非常参差不齐 这是我尝试过
  • MySQL 使用 CONCAT 条件进行选择

    我正在尝试在脑海中编译它 我有一个包含名字和姓氏字段的表 我有一个像 Bob Jones 或 Bob Michael Jones 这样的字符串以及其他几个字符串 问题是 例如我有 鲍勃的名字 以及 迈克尔 琼斯的姓氏 所以我想 SELECT
  • Java流是否有相当于带有变量赋值的while

    是否存在与以下内容等效的流 List
  • Tensorflow 从元图中打印所有占位符变量名称

    我有一个张量流模型 其中有 meta 和检查点文件 我试图打印模型所需的所有占位符 而不查看构建模型的代码 以便我可以在不知道模型是如何创建的情况下构建输入 feed dict 作为参考 这里是模型构建代码 在另一个文件中 def save
  • 优秀的 setjmp/longjmp 教程 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 你好 我想阅读有关 C 语言 setjmp longjmp 的优秀教程 如果有真实的而不是人造的示例 那就更好了 Thanks 这并不是一个真正的教程 而是libpng 文档描述该库
  • 应用程序更新后共享首选项丢失

    我一整天都在研究这个问题 以下是要点 共享首选项should当用户更新应用程序时保持持久性 就我而言 更新应用程序后 它们丢失了 这个问题每次都会重现 我从 Play 商店安装旧的 APK 然后adb install r new apk使用