SharedPreferences数据存储介绍

Android  2024年10月16日 am8:26发布2个月前更新 城堡大人
45 0 0

前言

Android中的SharedPreferences经常使用,这里就对着存储的数据类型进行简单的记录,方便自己回顾。

正文

进入SharedPreferences.java看一下主要的方法。

写入方法

常用的写入数据的方法如下

Editor putStringSet(String key, @Nullable Set<String> values);
Editor putString(String key, @Nullable String value);
Editor putInt(String key, int value);
Editor putLong(String key, long value);
Editor putFloat(String key, float value);
Editor putBoolean(String key, boolean value);

读出方法

常用的读出数据的方法有如下

String getString(String key, @Nullable String defValue);
Set<String> getStringSet(String key, @Nullable Set<String> defValues);
int getInt(String key, int defValue);
long getLong(String key, long defValue);
float getFloat(String key, float defValue);
boolean getBoolean(String key, boolean defValue);

保存List数据

SharedPreferences还可以存储List数据(Collection下的ArrayList,HashSet等),不过类型限定死了,只能是String类型。

使用的方法

Editor putStringSet(String key, @Nullable Set<String> values);
Set<String> getStringSet(String key, @Nullable Set<String> defValues);
存储String类型的List数据

只能是String类型的

写入
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
SharedPreferences sharedPreferences = getSharedPreferences("PREFS_LIST", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putStringSet("KEY_LIST", new HashSet<>(list));
editor.apply();

存储的数据

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <set name="KEY_LIST">
        <string>李四</string>
        <string>张三</string>
        <string>王五</string>
    </set>
</map>
读出
ArrayList<String> list = new ArrayList<>();
SharedPreferences sharedPreferences = getSharedPreferences("PREFS_LIST", Context.MODE_PRIVATE);
Set<String> set = sharedPreferences.getStringSet("KEY_LIST", new HashSet<>());
list.addAll(set);
存储自定义的类List数据

如果是自定义类呢,比如Student类

public class Student {
    private final int age;
    private final String name;
    private final float score;

    public Student(int age, String name, float score) {
        this.age = age;
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public float getScore() {
        return score;
    }

    @NonNull
    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                ", score=" + score +
                '}';
    }
}
private ArrayList<Student> mList = new ArrayList<>();
//添加数据
mList.add(new Student(16, "张三", 500));
mList.add(new Student(17, "李四", 490));
mList.add(new Student(15, "王五", 580));

此时如果SharedPreferences要存储mList时,直接使用putStringSet()时不可的。

下面介绍使用方式,需要使用Json存储。

这里使用Gson进行对数据转换

//https://github.com/google/gson
implementation 'com.google.code.gson:gson:2.11.0'

初始化Gson

mGson = new GsonBuilder().setPrettyPrinting().create();
写入
SharedPreferences sharedPref = getSharedPreferences("PREFS_LIST", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
//mGson把list进行转为String
editor.putString("KEY_LIST", mGson.toJson(mList));
editor.apply();

存储的数据

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="KEY_LIST">[&#10;  {&#10;    &quot;age&quot;: 16,&#10;    &quot;name&quot;: &quot;张三&quot;,&#10;    &quot;score&quot;: 500.0&#10;  },&#10;  {&#10;    &quot;age&quot;: 17,&#10;    &quot;name&quot;: &quot;李四&quot;,&#10;    &quot;score&quot;: 490.0&#10;  },&#10;  {&#10;    &quot;age&quot;: 15,&#10;    &quot;name&quot;: &quot;王五&quot;,&#10;    &quot;score&quot;: 580.0&#10;  }&#10;]</string>
</map>
读出
SharedPreferences sharedPref = getSharedPreferences("PREFS_LIST", Context.MODE_PRIVATE);
String data = sharedPref.getString("KEY_LIST", null);
//通过gson进行转换数据
ArrayList<Student> list = mGson.fromJson(data, new TypeToken<ArrayList<Student>>() {}.getType());

参考文章

 历史上的今天

  1. 2021: adb shell 命令启动带参数的Activity(0条评论)
  2. 2021: 海子:七月不远(0条评论)
  3. 2019: 周国平:风骚和魅力(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

Bootstrap4移除图标解决方法

我们知道Bootstrap3是支持的图标 ,但Bootstrap4 不支持。这是因为Bootstrap4 把图标移除了,取而代之建议使用其他的,比如 https://octicons.github.com/ 和http://fontawesome.io/如果你在升级Bootstrap4 ...

SharedPreferences最后一次写入时断电偶尔存在不保存问题

前言最近测试反馈,播放音乐的信息断电时偶尔不记忆。项目中的记忆是使用sharedpreferences的,sharedpreferences是以xml文件保存,保存的位置在:/data/data/[包名]/shared_prefs测试反馈的关键字[断电]、[偶尔]和[不记忆],也就是说这...

NDK中jni.h头文件完整内容

前言这里摘抄一下jni.h头文件中的所有内容,主要是方便自己查阅。涉及的文件android-ndk-r21d-windows-x86_64\android-ndk-r21d\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include...

ubuntu nginx简单记录

前言记录一下nginx的简单使用,stop ,start restart,记录于此是方便自己查阅。正文stopsudo service nginx stopstartsudo service nginx startrestartsudo service nginx restart...

Files中启动自己的播放器

前言记录一下点击Android Files文件管理器中多媒体文件拉起我们自己写的播放器。流水账,没啥可看的,跳过吧。正文流水账而已,记录一下,方便自己查阅。只需要在AndroidMainfest.xml中的Activity中配置如下隐藏内容!评论可看后才能查看!评论可看audio/*...

addr2line.exe的简单使用

前言不常用,偶尔需要,在学习JNI时也学习addr2line工具的使用,记录于此,方便自己查阅。正文addr2line工具在Android NDK包中,我这里以Window版的为例。我这下载的是android-ndk-r21d-windows-x86_64.zip解压和环境配置我这不解...