学习 Android 中的 SharedPreferences

发布:2024-10-25 14:48 阅读:15 点赞:0

SharedPreferences 是 Android 中的一种数据存储选项,可以用于保存和检索少量数据。它以键值对的形式将原始数据类型(如 String、int、float 和 Boolean)保存在 XML 文件中。通过使用 SharedPreferences,开发者可以轻松地在应用中保存用户的登录信息、检查用户是否登录,以及在活动之间传递数据。

一. SharedPreferences 的基本用法

1.1 访问 SharedPreferences 对象

// 获取 SharedPreferences 对象
SharedPreferences sharedPreferences = getSharedPreferences("myAppSharedPreferences", Context.MODE_PRIVATE);
  • 说明: 这里通过 getSharedPreferences 方法获取名为 "myAppSharedPreferences" 的 SharedPreferences 对象,模式设置为 MODE_PRIVATE,表示该文件仅可被本应用访问。

1.2 编辑和写入数据

// 获取 SharedPreferences.Editor
SharedPreferences.Editor editor = sharedPreferences.edit();

// 写入数据
editor.putString("EmployeeName""exampleUser"); // 保存员工姓名
editor.putInt("EmployeeAge"25); // 保存员工年龄

// 提交更改
editor.commit(); // 提交更改以保存数据
  • 说明: 使用 Editor 对象进行数据的写入,putStringputInt 方法用于保存不同类型的数据,最后调用 commit() 方法提交更改。

1.3 读取数据

// 读取数据
String employeeName = sharedPreferences.getString("EmployeeName""defaultValue"); // 获取员工姓名
int employeeAge = sharedPreferences.getInt("EmployeeAge"0); // 获取员工年龄
  • 说明: 使用 getStringgetInt 方法读取之前保存的数据,提供默认值以防数据不存在。

二. Kotlin 中的 SharedPreferences

Kotlin 对 SharedPreferences 的用法与 Java 相似,且增加了一些功能以防止空指针异常。

2.1 Kotlin 示例代码

val sharedPreferences = getSharedPreferences("myAppPreferences", Context.MODE_PRIVATE) // 获取 SharedPreferences
val employeeName = sharedPreferences.getString("EmployeeName""defaultValue"// 获取员工姓名
val employeeAge = sharedPreferences.getInt("EmployeeAge"0// 获取员工年龄
  • 说明: 这里使用 val 声明变量,获取 SharedPreferences 和数据的方法与 Java 相同。

三. 使用示例:便签应用

接下来,我们将通过一个简单的便签应用示例,演示如何使用 SharedPreferences 保存和加载数据。

3.1 XML 布局文件 (activity_notes.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">


    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="便签应用:"
        android:textStyle="bold" />


    <EditText
        android:id="@+id/titleEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="标题" />


    <EditText
        android:id="@+id/contentEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="描述"
        android:minLines="5" />


    <Button
        android:id="@+id/saveButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="保存" />


    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="便签列表" />


    <ScrollView
        android:id="@+id/notesScrollView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <LinearLayout
            android:id="@+id/notesContainer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" />

    </ScrollView>
</LinearLayout>
  • 说明: 该布局文件定义了便签应用的界面,包含输入框、保存按钮和便签列表展示区域。

3.2 Java 代码示例

3.2.1 加载便签

private void loadNotesFromPreferences() {
    SharedPreferences sharedPreferences = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); // 获取 SharedPreferences
    int noteCount = sharedPreferences.getInt(KEY_NOTE_COUNT, 0); // 获取便签数量

    for (int i = 0; i < noteCount; i++) {
        String title = sharedPreferences.getString("note_title_" + i, ""); // 获取每个便签的标题
        String content = sharedPreferences.getString("note_content_" + i, ""); // 获取每个便签的内容

        Note note = new Note();
        note.setTitle(title); // 设置便签标题
        note.setContent(content); // 设置便签内容

        noteList.add(note); // 将便签添加到便签列表中
    }
}

3.2.2 保存便签

private void saveNotesToPreferences() {
    SharedPreferences sharedPreferences = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); // 获取 SharedPreferences
    SharedPreferences.Editor editor = sharedPreferences.edit(); // 获取编辑器

    editor.putInt(KEY_NOTE_COUNT, noteList.size()); // 保存便签数量
    for (int i = 0; i < noteList.size(); i++) {
        Note note = noteList.get(i); // 获取便签对象
        editor.putString("note_title_" + i, note.getTitle()); // 保存便签标题
        editor.putString("note_content_" + i, note.getContent()); // 保存便签内容
    }
    editor.apply(); // 应用更改
}
  • 说明: 这两个方法分别用于从 SharedPreferences 中加载和保存便签数据。

四. 结论

通过本文的讲解,我们了解了 Android 中 SharedPreferences 的基本用法及其在实际应用中的示例。SharedPreferences 提供了一种简单高效的方式来存储小量数据,适用于保存用户设置和应用状态。掌握 SharedPreferences 的使用对于提升 Android 开发技能具有重要意义。