安卓SharedPreferences使用

news/2024/5/12 13:59:24

目录

  • 一、简介
  • 二、使用
    • 2.1 getSharedPreferences
    • 2.2 增加数据
    • 2.3 读取数据
    • 2.4 删除数据
    • 2.5 修改数据
    • 2.6 清除数据
    • 2.7 提交数据


一、简介

SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity、重载窗口状态onSaveInstanceState使用SharedPreferences完成,它提供了Android平台常规的Long长整形、Int整形、String字符串型等的保存。
在这里插入图片描述

它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息,其存储位置在/data/data/<包名>/shared_prefs目录下。

在这里插入图片描述

SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。


二、使用

SharedPreferences的一般使用流程

  • 1.使用ContextWrapper子类调用getSharedPreferences方法获得SharedPreferences对象;
  • 2.使用SharedPreferences接口的edit获得SharedPreferences.Editor对象;
  • 3.通过SharedPreferences.Editor接口的putXXX方法保存key-value对;
  • 4.通过过SharedPreferences.Editor接口的commit方法保存key-value对。
    //获取SharedPreferences对象SharedPreferences sharedPreferences = getSharedPreferences("user",MODE_PRIVATE);//获取Editor对象的引用SharedPreferences.Editor editor = sharedPreferences.edit();//插入键值对editor.putString("name", "henry");editor.putInt("age", 25);editor.putBoolean("islogin",true);// 提交数据editor.commit();

2.1 getSharedPreferences

getSharedPreferences(“user”, MODE_PRIVATE)方法用于获取一个特定名称的SharedPreferences对象。这个方法有两个参数,分别是SharedPreferences的名称和模式。

MODE_PRIVATE:表示私有模式,即只有当前应用程序可以访问这个SharedPreferences文件。其他应用程序无法访问。
其他常用模式包括:
MODE_WORLD_READABLE:表示该SharedPreferences文件可以被其他应用程序读取,但不允许写入。
MODE_WORLD_WRITEABLE:表示该SharedPreferences文件可以被其他应用程序读取和写入,不推荐使用,因为安全性较低。
MODE_MULTI_PROCESS:表示在多个进程中可以同时访问该SharedPreferences对象,已经废弃,不建议使用。
MODE_APPEND:表示在写入数据时,将新数据追加到现有数据之后。

区别:

MODE_PRIVATE:是最常用的模式,只有当前应用可以访问SharedPreferences文件,保证了数据的私密性和安全性。
MODE_WORLD_READABLEMODE_WORLD_WRITEABLE:允许其他应用程序访问SharedPreferences文件,但安全性较低,可能会造成数据泄露。
MODE_MULTI_PROCESS:已经废弃,不建议使用。
MODE_APPEND:用于在写入数据时追加到现有数据之后,适用于需要保留历史数据的场景。

2.2 增加数据

editor.putxxx系列方法

  //插入键值对editor.putString("name", "henry");editor.putInt("age", 25);editor.putBoolean("islogin",true);

2.3 读取数据

读取数据通过SharedPreferences对象,第二个参数一般是个默认值,表示当获取数据的时候没有该key则返回一个默认值。

 String name=sharedPreferences.getString("name","");int age = sharedPreferences.getInt("age",0);boolean islogin = sharedPreferences.getBoolean("islogin",true);

2.4 删除数据

通过Editor对象的remove()方法

   editor.remove("name");editor.remove("age");

2.5 修改数据

修改数据跟增加数据类似,覆盖原来的数据即修改数据。

  editor.putString("name", "henry");editor.putInt("age", 25);editor.putBoolean("islogin",true);

2.6 清除数据

Editor对象的clear方法来完成清楚数据

 editor.clear();

2.7 提交数据

每一次的修改完需要保存,都需要提交。

editor.commit();

值得注意的是
SharedPreferences.Editor 提供了两种方法来提交对 SharedPreferences 的修改,分别是 commit() 和 apply() 方法。这两种方法的主要区别如下:

  • commit和apply虽然都是原子性操作,但是原子的操作不同,commit是原子提交到数据库,所以从提交数据到存在Disk中都是同步过程,中间不可打断。
  • 而apply方法的原子操作是原子提交的内存中,而非数据库,所以在提交到内存中时不可打断,之后再异步提交数据到数据库中,因此也不会有相应的返回值。
  • 所有commit提交是同步过程,效率会比apply异步提交的速度慢,但是apply没有返回值,永远无法知道存储是否失败。
  • 在不关心提交结果是否成功的情况下,优先考虑apply方法。

http://wed.xjx100/news/1263603.html

相关文章

安全上网,防止上网被记录(v2ray实现加密通信)

近期听一位亲威说&#xff0c;她在公司休闲的时候上了哪个网站&#xff0c;浏览了过的网站IT部门的人都会知道&#xff0c;这是因为现在大多数网络设备&#xff0c;像路由与交换机都有记录访问网站地址记录功能&#xff0c;涉及还可以设置成记录到交互的内容。要想保密&#xf…

学习transformer模型-矩阵乘法;与点积dot product的关系;计算attention

矩阵乘法&#xff1a; 1、当矩阵A的列数&#xff08;column&#xff09;等于矩阵B的行数&#xff08;row&#xff09;时&#xff0c;A与B可以相乘。 Ankie的评论&#xff1a;一个人是站着的&#xff0c;一个人是躺着的&#xff0c;站着的高度躺着的长度。 在计算attention的时候…

京东云0基础搭建帕鲁服务器_4核16G和8核32G幻兽帕鲁专用服务器

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程&#xff0c;非常简单&#xff0c;京东云推出幻兽帕鲁镜像系统&#xff0c;镜像直接选择幻兽帕鲁镜像即可一键自动部署&#xff0c;不需要手动操作&#xff0c;真正的新手0基础部署幻兽帕鲁&#xff0c;阿腾云atengyun.…

springMVC实现细节

DispatcherServlet、拦截器、处理器详解(通俗易懂)_处理器和拦截器的区别-CSDN博客

uniApp使用XR-Frame创建3D场景(8)粒子系统

上篇文章讲述了如何将XR-Frame作为子组件集成到uniApp中使用 本片我们详细讲解一下xr-frame的粒子系统 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"> <xr-node visible"{{sec8}}"><xr-asset-load t…

【React】onClick点击事件传参的4种方式

记录React onClick 点击事件传参的 4 种方式 方式一&#xff1a;使用内联箭头函数 import React, { MouseEvent } from "react";function App() {const handleClick (event: MouseEvent<HTMLButtonElement>, name: string) > {console.log(event)console.…

mysql80-DBA数据库学习4-多实例

什么是MySQL多实例 MySQL的多实例就是在一台机器上开启多个不同的服务端口&#xff0c;运行多个MySQL服务进程&#xff0c;使用不同的socket来监听这多个不同的端口以此提供服务&#xff0c;这一点和Oracle的多实例类似。这些MySQL的实例共用相同的MySQL但是使用的参数文件是不…

iOS library not found for -lMBProgressHUD

0x00 前因 一开始是使用 CocoaPods 管理 MBProgressHUD&#xff0c;后来直接导入 MBProgressHUD 源码&#xff0c;就出现了这个错误&#xff1a;library not found for -lMBProgressHUD 0x01 后果 在 Xcode 工程目录中找到文件夹&#xff1a;Frameworks 看看里面是否有个红色…