SharedPreferences是Android中一个轻量级的存储类,常用于保存app的配置数据,例如登录凭证等。通过生成
.xml
文件来保存数据,数据存放于/data/data/<Package Name>/shared_perfs
目录下。
使用方法
存储数据
使用SharedPreferences存储数据时,首先要获取SharedPreferences对象,然后通过该对象获取到Editor对象,最后调用调用Editor对象的相关方法存储数据。具体代码如下所示:
SharedPreferences sharedPreferences=getSharedPreferences("user",Context.MODE_PRIVATE);
Editor editor=sharedPreferences.edit();
//存入数据
editor.putString("username","admin");
editor.putString("password","123456");
//提交数据
editor.commit();
getSharedPreferences(name,mode)
第一个参数name用于指定存储数据的文件名,不用带.xml后缀,保存时会自动补全;第二个参数是指定文件的操作模式,共有四种模式分别为:
MODE_APPEND
——追加方式存储MODE_PRIVATE
——私有方式存储,其他应用无法访问MODE_WORLD_READABLE
——表示当前文件可以被其他应用读取MODE_WORLD_WRITEABLE
——表示当前文件可以被其他应用写入
读取数据
使用SharedPreferences存储数据时,只需创建SharedPreferences对像,然后使用该对象从对应的key取值即可。
SharedPreferences sharedPreferences=Context.getSharedPreferences();
String username=sharedPreferences.getString("username");
String password=sharedPreferences.getString("password");
删除数据
使用SharedPreferences删除数据时,首先需要获取到Editor对象,然后调用该对象的remove()
方法或者clear()
方法删除数据,最后提交。
remove()
方法和clear()
方法的区别在于remove()
方法只删除某一特定数据,而clear()
方法则删除所有数据。
SharedPreferences sharedPreferences=getSharedPreferences("user",Context.MODE_PRIVATE);
Editor editor=sharedPreferences.edit();
editor.remove("username");
editor.clear();
editor.commit();
案例内容:
创建一个登录页面,该页面包括两个输入框(用户名,密码),一个复选框(记住账号密码),一个登录按钮,一个取消按钮。当用户输入正确的账号密码后,如果勾选了复选框则将账号和密码利用SharedPreferences类将数据存储起来;如未勾选则将已保存的数据清除。
运行环境
- Windows 10
- Android Studio Arctic Fox (2020.3.1)
- jdk1.7.0_67
具体代码
创建布局
首先我们要明确需要做的主体框架
布局采用的时线性布局,要做成图中的样子,我们必须利用LinearLayout嵌套,父LinearLayout是全局的布局方式,可以看出,下方三个子LinearLayout是按竖直方向排列的,所以全局布局方式应该为线性垂直布局。
子布局①中,有一个TextView(用户名),一个EditText输入框,按水平方向排列,其他两个子布局也一样,所以它们都为线性水平布局,构思好后,敲出代码。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用户名:"
android:textSize="16dp"/>
<EditText
android:id="@+id/et_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16dp"/>
</LinearLayout>
<Li