安卓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方法。
相关推荐
小羊没烦恼!1 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里1 天前
java中的继承和多态的区别
java
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕1 天前
JSONObject与JSONArray封装数据格式区别
java·json
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
胡写代码1 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖1 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
此时不提桶,更待何时1 天前
01-06-A-JVM排查实战详解
java·jvm