安卓SharedPreferences使用

目录

  • 一、简介
  • 二、使用
    • [2.1 getSharedPreferences](#2.1 getSharedPreferences)
    • [2.2 增加数据](#2.2 增加数据)
    • [2.3 读取数据](#2.3 读取数据)
    • [2.4 删除数据](#2.4 删除数据)
    • [2.5 修改数据](#2.5 修改数据)
    • [2.6 清除数据](#2.6 清除数据)
    • [2.7 提交数据](#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对。
java 复制代码
    //获取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系列方法

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

2.3 读取数据

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

java 复制代码
 String name=sharedPreferences.getString("name","");
 int age = sharedPreferences.getInt("age",0);
 boolean islogin = sharedPreferences.getBoolean("islogin",true);

2.4 删除数据

通过Editor对象的remove()方法

java 复制代码
   editor.remove("name");
   editor.remove("age");

2.5 修改数据

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

java 复制代码
  editor.putString("name", "henry");
  editor.putInt("age", 25);
  editor.putBoolean("islogin",true);

2.6 清除数据

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

java 复制代码
 editor.clear();

2.7 提交数据

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

java 复制代码
editor.commit();

值得注意的是

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

  • commit和apply虽然都是原子性操作,但是原子的操作不同,commit是原子提交到数据库,所以从提交数据到存在Disk中都是同步过程,中间不可打断。
  • 而apply方法的原子操作是原子提交的内存中,而非数据库,所以在提交到内存中时不可打断,之后再异步提交数据到数据库中,因此也不会有相应的返回值。
  • 所有commit提交是同步过程,效率会比apply异步提交的速度慢,但是apply没有返回值,永远无法知道存储是否失败。
  • 在不关心提交结果是否成功的情况下,优先考虑apply方法。
相关推荐
yours_Gabriel6 分钟前
【微服务】认识微服务
java·微服务·架构
ThetaarSofVenice21 分钟前
【Java从入门到放弃 之 Java程序基础】
java·开发语言·python
夏子曦30 分钟前
java——Tomcat调优策略
java·开发语言·tomcat
夏子曦33 分钟前
java——利用 Tomcat 自定义的类加载器实现热加载
java·tomcat
G丶AEOM34 分钟前
Redis中HGETALL和ZRANGE命令
java·redis
In 202937 分钟前
矩阵【Lecode_HOT100】
java·算法·矩阵
王·小白攻城狮·不是那么帅的哥·天文1 小时前
Spring框架使用xml方式配置ThreadPoolTaskExecutor线程池,并且自定义线程工厂
xml·java·spring·线程池
ᝰꫝꪉꪯꫀ3611 小时前
JavaWeb——Mybatis
java·开发语言·后端·mybatis
没有黑科技1 小时前
网上蛋糕售卖店管理系(Java+SpringBoot+MySQL)
java·spring boot·mysql
是老余1 小时前
算法之区间和题目讲解
java·算法