使用Android中的SharedPreferences存储数据

在移动应用中,经常会遇到要读取、存储少量数据的场景,如果使用数据库就有点杀鸡用牛刀的感觉。还好,Android为开发人员提供了一个叫 SharedPreferences 的机制,可以用于存储这样的数据。

一个 SharedPreferences 是一个轻量级的存储类,它是用xml文件存放数据,文件存放在/data/data/应用包名/shared_prefs 目录下。SharedPreferences 可用于存储 int、boolean、float、long、String、StringSet 等多种数据类型的数据。

保存数据

要保存数据,需要执行以下步骤:

  1. 获得SharedPreferences对象实例,这个任务是通过调用 getSharedPreferences 来完成的:
1
SharedPreferences settings = getSharedPreferences(“AppSettings”, Context.MODE_PRIVATE);

其中:
第一个参数是为 SharedPreferences 指定的名字,
第二个参数是 SharedPreferences 的操作模式,常用的取值为:

Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.

  1. 开启编辑模式,设置数据,然后提交更改
1
2
3
settings.edit()
.putString("theme", txtTheme.getText().toString())
.commit();

在示例中,模拟了从界面读取信息存入到 SharedPreferences 的场景

读取数据

  1. 获得SharedPreferences对象实例,这个任务是通过调用 getSharedPreferences 来完成的:
1
SharedPreferences settings = getSharedPreferences(“AppSettings”, Context.MODE_PRIVATE);
  1. 调用对应数据类型的get方法
1
2
SharedPreferences settings = getSharedPreferences(SHARED_PREFS_NAME, 0);
String theme = settings.getString("theme", "");

完整的示例代码如下:

布局文件: activity_shared_prefs.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".SharedPrefsActivity">

<Button
android:id="@+id/btnSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Save"
app:layout_constraintEnd_toEndOf="@+id/txtTheme"
app:layout_constraintStart_toStartOf="@+id/txtTheme"
app:layout_constraintTop_toBottomOf="@+id/txtTheme" />

<Button
android:id="@+id/btnLoad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Load"
app:layout_constraintEnd_toEndOf="@+id/btnSave"
app:layout_constraintStart_toStartOf="@+id/btnSave"
app:layout_constraintTop_toBottomOf="@+id/btnSave" />

<EditText
android:id="@+id/txtTheme"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="98dp"
android:layout_marginTop="81dp"
android:layout_marginEnd="98dp"
android:ems="10"
android:inputType="textPersonName"
android:text="Name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

类文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class SharedPrefsActivity extends AppCompatActivity {

private static final String TAG = SharedPrefsActivity.class.getSimpleName();

private static final String SHARED_PREFS_NAME = "AppSettings";

@BindView(R.id.txtTheme) EditText txtTheme;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shared_prefs);

ButterKnife.bind(this);
}

@OnClick(R.id.btnSave) void onSave() {

SharedPreferences settings = getSharedPreferences(SHARED_PREFS_NAME, Context.MODE_PRIVATE );
settings.edit()
.putString("theme", txtTheme.getText().toString())
.commit();
}

@OnClick(R.id.btnLoad) void onLoad() {

SharedPreferences settings = getSharedPreferences(SHARED_PREFS_NAME, 0);
String theme = settings.getString("theme", "");
txtTheme.setText(theme);
}
}

本文标题:使用Android中的SharedPreferences存储数据

文章作者:晨星

发布时间:2019年08月11日 - 22:08

最后更新:2020年05月28日 - 16:05

原始链接:https://www.mls-tech.info/app/android/android-sharedpreferences/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。