一、什么是 SharedPreferences

如果你用过 web,那么对 localStorage 应该并不陌生,使用键值对的形式将一些信息保存在浏览器里面。

1. SharedPreferences - 图1

Android 里也提供了类似的技术,将数据以键值对的形式保存在手机上。Android 手机就是个操作系统,保存的数据本质上就是操作系统上的一个文件(下面介绍存数据时会顺带介绍到底存在哪个文件里)。只不过提供 SharedPreferences 方便存和取。

二、存数据

如下代码就是存数据的操作,其中 getSharedPreferences() 方法接收两个参数,第一个参数固定字符串 “data” 表示数据存储在 data 目录下,下面可以看到,在 Android 是约定的事;第二个参数 MODE_PRIVATE 表示存储的数据只有当前应用可以查看,其它 app 没权限访问。

  1. SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE).edit();
  2. // 开始存数据
  3. editor.putString("name", "dkvirus");
  4. editor.putBoolean("isLogin", true);
  5. editor.putInt("userId", 1);
  6. editor.apply();

数据被存储在手机上,以文件的形式保存。打开 File Explorer,不知道怎么打开的看下面这张图。

1. SharedPreferences - 图2

打开 data/data/[项目包名]/shared_prefs/data.xml 就是保存的文件,右键打开可以看到就是刚存储的内容。

1. SharedPreferences - 图3

三、取数据

取数据也是相当的简单。

  1. SharedPreferences preferences = getSharedPreferences("data", MODE_PRIVATE);
  2. String name = preferences.getString("name", "");
  3. Boolean isLogin = preferences.getBoolean("isLogin", false);
  4. int userId = preferences.getInt("userId", 0);

四、实际应用

应用一:登录

使用手机应用如 app 可以看到只有第一次登陆时它会显示登录页面,之后每次都直接进入首页,这是怎么做到的。

第一次登录后在本地记录登录状态 isLogin=true、userId=1,之后每次登录都获取下这两个变量,如果值为 true 就说明已经登陆过,直接拿 userId 去查询该用户对应数据即可。

应用二:记住密码

qq 上切换其它账号时可以发现不需要重新输入密码,这也可以用 SharedPreferences 来做,将密码保存在本地,切换账号时直接读取即可。