安卓SharedPreferences使用


一、简介

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方法。
  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值