我的Android成长之路(11)----Android之SharedPreferences用法详解

Android 11.0 SharedPreferences in credential encrypted storage are not avai 在11.0的系统rom定制化开发中,在开机的过程中,由于某些应用在开机解锁阶段就开始访问查询短信和联系人等功能,所以 会出现抛异常的情况出现,接下来分析下相关的情况,然后来解决这些问题 阅读详情

Android之SharedPreferences用法详解:

1、存数据

SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE);
sp.edit().putString("name", "小张").putInt("age", 11).commit();
 
  • 1
  • 2
  • 1
  • 2

或者下面的写法也可以

SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE);
Editor editor = sp.edit();
editor.putString("name", "小张");
editor.putInt("age", 11);
editor.commit();
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

切记不要写成下面的形式,会导致数据无法存储

SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE);
sp.edit().putString("name", "小张");
sp.edit().putInt("age", 11);
sp.edit().commit();
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

为什么这种方式无法存储,因为sp.edit()每次都会返回一个新的Editor对象,Editor的实现类EditorImpl里面会有一个缓存的Map,最后commit的时候先将缓存里面的Map写入内存中的Map,然后将内存中的Map写进XML文件中。使用上面的方式commit,由于sp.edit()又重新返回了一个新的Editor对象,缓存中的Map是空的,所以导致数据无法被存储。

2、取数据

SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE);
String name = sp.getString("name", null);
int age = sp.getInt("age", 0);
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

getSharedPreferences的具体实现是在frameworks/base/core/java/android/app/ContextImpl.java,代码如下:

@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
    SharedPreferencesImpl sp;
    synchronized (ContextImpl.class) {
        ......
        final String packageName = getPackageName();
        ArrayMap<String, SharedPreferencesImpl> packagePrefs = sSharedPrefs.get(packageName);
        if (packagePrefs == null) {
            packagePrefs = new ArrayMap<String, SharedPreferencesImpl>();
            sSharedPrefs.put(packageName, packagePrefs);
        }

        ......
        sp = packagePrefs.get(name);
        if (sp == null) {
            File prefsFile = getSharedPrefsFile(name);
            sp = new SharedPreferencesImpl(prefsFile, mode);
            packagePrefs.put(name, sp);
            return sp;
        }
    }
    ......
    return sp;
}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

SharedPreferencesImpl是SharedPreferences接口的具体实现类,一个name对应一个SharedPreferencesImpl,一个应用程序中根据name的不同会有多个SharedPreferencesImpl。 
SharedPreferencesImpl的具体实现是在frameworks/base/core/java/android/app/SharedPreferencesImpl.java,我们可以通过getSharedPreferences获得SharedPreferences的实例,当我们调用sp.getString等get方法取数据时,实际上是直接从内存中的Map里面去取,get方法传入的第一个参数正好是Map的key,第二个参数是当Map中没有这个key对应值的时候,返回的默认值。


(数字ic验证)从零开始的apb_watchdog验证模块搭建(一、功能介绍与环境搭建) apb_watchdog验证模块搭建(一)文章目录 文章目录apb_watchdog验证模块搭建(一)文章目录前言一、apb_watchdog简单功能介绍二、测试平台环境搭建1.测试所用模板介绍2.tb与interface2.env与watchdog_pkg3.test与base_sequence4.Makefile总结——当前验证结构 前言 本文介绍了apb_watchdog验证模块的搭建过程与其具体代码,主要包括其中验证环境的构建,测试序列的发送与回归测试收集。主要运用systemvorilog与u 阅读详情

相关推荐

DeepSeek跨会话协作指南:让AI成为你的「第二大脑」

通过DeepSeek的跨会话协作系统,用户实测工作效率提升63%。

紫夜若涵的博客 1474

Android中SharedPreferences的实现原理

循序渐进的讲解Android中SharedPreferences的实现原理。包括SharedPreferences实例的获取、数据的获取、数据的保存流程

AI应用安全 - Prompt注入攻击

随着大模型的爆火,各行各业都在使用大模型进行智能化改造。但是如何做一个可靠的大模型应用,就需要考虑各种安全问题。本文主要介绍一种常见的安全问题,即prompt注入攻击,并介绍一些防范手段。Prompt Injection Attack(提示注入攻击)是针对大型语言模型(LLM)的一种新兴安全威胁,攻击者通过精心构造的输入提示(prompt)来操纵模型行为,使其产生非预期输出或执行恶意操作。它主要包括两种注入方式,一是直接注入,而是间接注入。

sinat_28694519的博客 1932

SharePreference原理

SharedPreferences是Android提供的数据持久化的一种手段,适合单进程、小批量的数据存储与访问。因为SharedPreferences的实现是基于单个xml文件实现的,并且,所有持久化数据都是一次性加载到内存,如果数据过大,是不合适采用SharedPreferences存放的。而适用的场景是单进程的原因同样如此,由于Android原生的文件访问并不支持多进程互斥,所以SharePreferences也不支持,如果多个进程更新同一个xml文件,就可能存在同不互斥问题。 SharedPref

Android 4298

微型纵向加密在新能源场站中的实战部署与运维避坑指南

本文详细解析了微型纵向加密在新能源场站中的实战部署与运维技巧。通过国密算法SM4实现数据加密,确保新能源场站通信安全,同时提供非侵入式部署方案和运维避坑指南,帮助提升网络稳定性和运维效率。

weixin_30505225的博客 596

基于QT+Halcon实现线序识别

一、线序识别算法步骤。 1.按照检测区域m_pItem1的外接矩形(rtBount)的大小, 截取感兴趣区域图像hRoi。 2.把截取出来的感兴趣区域图像hRoi, 分离出R、G、B三个通道hRed、hGreen、hBlue。 3.把hRed、hGreen、hBlue三个通道转换成cielab颜色空间, 得到hChannelL、hChannelA、hChannelB三个颜色图。 4.设m_pItem1的宽为iItemW, 高为iItemH. 分别申请大小为iItemW的pSumL、pSumA、pSumB内

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 1748

Android SharedPreferences实现原理

Android SharedPreferences实现原理一.简介二.实现原理1.创建2.取值3.更新4.应用(1)commit()(2)apply()三.总结 一.简介 在Android中,我们通常会需要存储一些数据,有一些大型的数据诸如图片、JSON数据等,可以通过读写File的方式实现;有一些大量级的关系型数据,可以通过数据库SQLite实现;还有一些简单的、无安全风险的键值对数据,可以通过...

依生依世 2217

飞塔CVE-2022-40684复现

admin 无密码直接回车(会提示修改密码)

G3et的博客 1145

Android SharedPreferences 实现原理解析

序言 Android 中的 SharedPreference 是轻量级的数据存储方式,能够保存简单的数据类型,比如 String、int、boolean 值等。其内部是以 XML 结构保存在 /data/data/包名/shared_prefs 文件夹下,数据以键值对的形式保存。下面有个例子: <?xml version='1.0' encoding='utf-8' standalone='...

weixin_33795833的博客 345

【服务器电源架构与关键技术发展趋势】深度解析架构、方案、玩家与未来趋势

技术维度:台达 / 光宝在高功率密度(97%+ 效率)和垂直整合上领先,大陆厂商(麦格米特 / 欧陆通)在成本控制和快速响应上更优,国际厂商(英飞凌)聚焦核心器件突破。 客户维度:台达绑定英伟达核心供应链,麦格米特 / 欧陆通兼顾国内外客户,光宝 / 中恒电气侧重云端与互联网厂商。 趋势适配:所有厂商均加速布局 800V 高压架构、液冷技术和高功率 Power Shelf,以应对 AI 服务器单柜功率从 10kW→200kW 的升级需求。

昔时扬尘处 723

Spring AI Alibaba实战训练营-05模型输出质量评估

本文介绍了使用Spring AI Alibaba库评估AI模型输出质量的方案。项目通过5种评估器实现自动化评估:相关性评估、事实准确性评估、答案相关性评分、答案正确性评估和忠实度评估。开发步骤包括环境准备(Java 17、Maven、API Key获取)、创建Maven项目、配置Spring AI(通过环境变量安全设置API Key)以及实现RAG流程。重点强调了通过评估器自动检测AI输出的质量指标,帮助开发者优化AI应用性能。

program哲学 217

Android SharedPreferences 实现原理

Android SharedPreferences 实现原理 Android 的 SharedPreferences 一般用来保存一些标记位或者是一些设置项,比较适合轻量级的存储。 通常获取 SharedPreferences 时有两种方法: 通过 PreferenceManager 的 getDefaultSharedPreferences 得到默认的 SharedPreferences,也...

okclouderx的博客 740

lammps案例:聚乙烯和石墨烯界面pull out模拟

大家好,我是小马老师。 本文介绍lammps模拟计算界面结合力的一个案例。 本案例参考论文《The interfacial mechanical properties of functionalized graphene- polymer nanocomposites》,对论文作者表示感谢。 模型共分2层,上层为聚乙烯模型,下次为单层石墨烯,模拟过程共分3部分:建模、弛豫、拉伸。 (1)建模 使用MS建立聚乙烯和石墨烯模型,具体方法可参考之前的推文,使用build layer方法建立聚乙烯和石墨烯组合模型,

lammps_jiayou的博客 3494

Android Studio开发 SharedPreferences 详解

SQLite 提供了完整的 SQL 功能,但比大型数据库系统更轻量。掌握这些基本语法后,您可以在 Android 应用中有效地存储和管理结构化数据。

百锦再的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

艾尔登法环存档编辑器 ER-Save-Editor 完整攻略:三步跑起来,开始改档

卡在一个 BOSS 前打了好几个小时,或者想把手里的力量号改成智力号重开一次?ER-Save-Editor 是一款开源免费的艾尔登法环存档编辑器,直接修改 PC 和 PlayStation 的存档文件,让你随意改角色属性、装备和卢恩数量。 ## 初体验:这个存档编辑器能帮你做什么 ER-Save-Editor 面向的是想自定义角色的单机玩家,不做复杂操作,打开存档就能改。它适合这几类场景:

gitblog_00258的博客 851

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

安卓SharedPreferences类的使用

1 package com.lidaochen.phonecall; 2 3 import android.content.Intent; 4 import android.content.SharedPreferences; 5 import android.net.Uri; 6 import android.os.Environment; 7 impo...

weixin_30726161的博客 164

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Mapster 映射值设置实战:计算值、目标值转换与运行时参数传递

Mapster 作为一款基于表达式树编译的对象映射库,除了按名称自动匹配成员外,还提供了三组"值设置"能力:通过 `Map` 方法为单个目标成员注入自定义计算逻辑,通过 `AddDestinationTransform` 对某一类型的所有目标值做统一转换,以及通过 `MapContext.Current.Parameters` 在映射时传入当前用户等运行时上下文。读完本文,你将掌握如何在 `Typ

gitblog_00442的博客 1052

Android SharedPreferences 保存数据最基本用法

SharedPreferences网上查半天查不到想要的用法,自己写一个做个记录 最简单的sp使用 存储: SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE); sp.edit().putString("name", "小张").putInt("age", 11).commit()...

Theprogramleaders的博客 310

Android数据存储安全:从SharedPreferences到加密DataStore

在移动应用开发中,数据存储安全是保障用户隐私的关键环节。传统SharedPreferences由于明文存储和同步阻塞等问题,已无法满足现代安全需求。DataStore作为新一代解决方案,结合协议缓冲区和Kotlin协程,提供了类型安全和异步操作的优势。更进一步,通过与Android Keystore的硬件级加密结合,可实现TEE(可信执行环境)保护,确保密钥永不离开安全芯片。这种组合特别适合金融、政务等高安全要求的应用场景,能有效防御内存dump等攻击手段。实践中需注意版本兼容性和性能优化,例如使用Flow

weixin_33724659的博客 414

Android性能优化之SharedPreferences

《Android 存储选项之 SQLiteDatabase 创建过程源码分析》《Android 存储选项之 SQLiteDatabase 源码分析》《数据库连接池 SQLiteConnectionPool 源码分析》《SQLiteDatabase 启用事务源码分析》《SQLite 数据库 WAL 模式工作原理简介》《SQLite 数据库锁机制与事务简介》《SQLite 数据库优化那些事儿》前言本文不是与大家一起探讨SharedPreferences的基本使用,而是结合源码的角度揭秘对SharedPrefer

2401_85122651的博客 1753

Android之SharedPreferences详解

SharedPreferences作为Android存储数据方式之一,主要特点是: 1. 只支持Java基本数据类型,不支持自定义数据类型; 2. 应用内数据共享; 3. 使用简单. 使用方法 1、存数据 SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE); sp.edit().

a15838319826的博客 367

SharedPreferences 的用法

SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长整形、Int整形、String字符串型的保存,它是什么样的处理方式呢?   SharedPreferences类

linxuan0206的专栏 877

安卓开发 SharedPreferences用法小结

sharedpreference经常用于保存关于应用配置信息等的键值对类型数据,这些数据将会以xml文件的形式,保存在(手机上)应用的shared_prefs文件夹下。 SharedPreferences的用法: 一、数据的获取         1、获取sharedpreferences:               SharedPreferences s=getSharedPrefere

zfan93的博客 1232

终极Android数据存储方案:Kotpref让SharedPreferences操作提速50%

Kotpref是一款专为Android平台设计的SharedPreferences委托库,它通过Kotlin语言特性极大简化了数据存储操作,帮助开发者实现更高效、更简洁的偏好设置管理。作为Android开发中最常用的数据存储方案之一,SharedPreferences常常因为模板代码繁多、类型转换复杂而影响开发效率,而Kotpref正是为解决这些痛点而生。 ## 🚀 为什么选择Kotpref?

gitblog_00517的博客 744

Android之SharedPreferences详解与原理分析

切记不要写成下面的形式,会导致数据无法存储 SharedPreferences sp = getSharedPreferences("sp_demo", Context.MODE_PRIVATE); sp.edit().putString("name", "小张"); sp.edit().putInt("age", 11); sp.edit().commit();

lyl278401555的专栏 4万+

android 11 存储,android开发之路11(用SharedPreferences存储数据)(示例代码)

Android平台给我们提供了一个SharedPreferences类,实际上SharedPreferences处理的就是一个key-value(键值对),它是一个轻量级的存储类,特别适合用于保存软件配置参数及用户的偏好设置参数,比如登录时候的记住密码功能等。使用SharedPreferences保存数据,实际上是用xml文件存放数据,文件存放在/data/data//shared_prefs目录...

weixin_31082403的博客 527
上一篇: 常用特殊符号
下一篇: 我的Android成长之路(12)----监测自身APP流量
AImmortaI
博客等级 码龄11年 48粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值