Android 使用 SharedPreferences 存储 List 集合

Android 开发中,数据存储是一项不可避免的任务。对于小型数据的存储,Android 提供了多种方式,其中 SharedPreferences 是一个常用的方法。虽然 SharedPreferences 通常用于存储简单的数据类型,但我们可以通过一些技巧来存储集合,比如 List。本文将介绍如何使用 SharedPreferences 存储和读取 List 集合。

什么是 SharedPreferences?

SharedPreferences 是 Android 中提供的一种轻量级的数据存储方式。它允许你以键值对的形式存储小型数据,这些数据会保存在设备的内存中。使用 SharedPreferences,你可以方便地存储用户的配置信息或应用程序的状态。

为什么要存储 List?

在许多应用场景中,我们需要存储多个相关的数据项,如用户的购物车、收藏夹等。虽然 SharedPreferences 不直接支持存储 List,但是我们可以将 List 转换为 String 存储。

代码示例

步骤 1: 依赖库

首先,确保你在项目中包含必要的依赖项。在 build.gradle 文件中,确认你的 Android 版本支持。

android {
    ...
    compileSdkVersion 30
    ...
}

步骤 2: 存储 List

我们将创建一个简单的方法来将 List 存储到 SharedPreferences 中。为了实现这一目标,我们首先需要将 List 转换为 String。最常用的方法是使用 Gson 库进行序列化和反序列化。

首先,添加 Gson 依赖:

implementation 'com.google.code.gson:gson:2.8.6'

然后,可以使用下面的代码来存储 List

import android.content.Context;
import android.content.SharedPreferences;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Set;

public class SharedPreferencesUtil {
    private static final String PREFS_NAME = "MyPrefs";
    private SharedPreferences sharedPreferences;
    private SharedPreferences.Editor editor;
    private Gson gson;

    public SharedPreferencesUtil(Context context) {
        sharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
        editor = sharedPreferences.edit();
        gson = new Gson();
    }

    public void saveList(String key, ArrayList<String> list) {
        String json = gson.toJson(list); // 将 List 转换为 JSON 字符串
        editor.putString(key, json);
        editor.apply(); // 应用更改
    }
}

步骤 3: 读取 List

接下来,我们来创建一个方法,用于从 SharedPreferences 中读取 List

public ArrayList<String> getList(String key) {
    String json = sharedPreferences.getString(key, null);
    Type type = new TypeToken<ArrayList<String>>() {}.getType(); // 获取 List 类型
    return gson.fromJson(json, type); // 将 JSON 字符串转换回 List
}

步骤 4: 使用示例

现在让我们看看如何使用这个工具类来存储和读取 List

public class MainActivity extends AppCompatActivity {

    private SharedPreferencesUtil sharedPreferencesUtil;

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

        sharedPreferencesUtil = new SharedPreferencesUtil(this);

        ArrayList<String> travelDestinations = new ArrayList<>();
        travelDestinations.add("Paris");
        travelDestinations.add("Tokyo");
        travelDestinations.add("New York");

        // 存储 List
        sharedPreferencesUtil.saveList("Destinations", travelDestinations);

        // 读取 List
        ArrayList<String> retrievedList = sharedPreferencesUtil.getList("Destinations");
        for (String destination : retrievedList) {
            Log.d("TAG", "Destination: " + destination);
        }
    }
}

代码解析

  1. 存储 List:我们使用 GsontoJson 方法将 ArrayList 转换为 JSON 格式字符串,并将其存储在 SharedPreferences 中。
  2. 读取 List:我们使用 fromJson 方法将存储的 JSON 字符串转换回 ArrayList
  3. 确保线程安全:使用 apply() 方法异步保存数据,避免在主线程中执行耗时操作。

旅行图

在这里,我们将利用 mermaid 语法展示一个简单的旅行图,阐释不同的目的地。

journey
    title A Journey to World Cities
    section Paris
      Visit Eiffel Tower: 5: Paris
      Tour the Louvre: 4: Paris
    section Tokyo
      Explore Shibuya: 4: Tokyo
      Visit Mount Fuji: 5: Tokyo
    section New York
      See Times Square: 5: New York
      Visit Statue of Liberty: 5: New York

小结

在本文中,我们通过一个简单的 SharedPreferencesUtil 工具类,详细讲解了如何在 Android 中使用 SharedPreferences 存储和读取 List 集合。使用 Gson 库,我们简单地将 List 转换为 JSON 字符串,以便进行存储和读取。这种方式适用于需要保存小型集合数据的场景。

通过本文,你应该能够在你的应用程序中轻松实现 List 的存储与读取,为用户提供更好的使用体验。希望你能在实际开发中运用这些知识,提升你的Android开发技能!