Android SharedPreferences 存储 key / value 数据

文章目录

    Android App 中想实现保存默认的蓝牙设备 Mac 地址,本质上就是一个 key / value 键值对的存储及读取过程。

    可以使用 SharedPreferences 来实现。

    SharedPreferences 指向了一个存储键值对的 XML 文件,并提供了读写接口。

    共享级别

    • activity 级:getPreferences(), 即单个 activity 内共享的存储
    • app 级:即全局共享。getSharedPreferences(), 但是这个要加上两个参数,第一个是文件名,第二个是模式,用 MODE_PRIVATE 即可(本app内可见)
    • app 级:还有一个是 getDefaultSharedPreferences(),其不需要指定文件名,因为是默认写死的。应该是跟 app 内 settings UI 相关。

    异步/同步写入

    • 异步:apply
    • 同步:commit。应避免在 UI 主线程中调用 commit,否则会造成界面刷新的卡顿。

    数据何时消失

    • 卸载 app
    • 在系统设置里清空 app 数据
    • 主动调用 editor 的 remove one key 或者 clear 清空所有,然后提交更改

    code

    fragment 中:

    java 代码示例

    SharedPreferences pref = getActivity().getSharedPreferences(getPackageName() + "_ble", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = pref.edit();
    editor.putString("key_name1", "string value");
    editor.putInt("key_name2", 100);
    editor.apply();
    
    pref.getString("key_name1", "default value");
    

    对于 activity 和 service 来说,可以直接调用 getSharedPreferences。因为这两个都是继承自 Context。

    kotlin 代码示例,view model 中:

    val pref: SharedPreferences = getApplication<Application>().getSharedPreferences("ble", Context.MODE_PRIVATE)
    val editor = pref.edit()
    editor.putString("mac", mac)
    editor.apply()
    

    查看真机数据

    Android Studio 界面右下角有个 Device File Explorer, 点开之后,找到 /data/data/你的APP包名/shared_prefs/指定的文件名.xml

    里面存储的就是 key / value 数据。例如:

    <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
    <map>
        <string name="default_device">string value</string>
    </map>
    

    存储对象的序列化数据

    有时需要将 object 直接缓存:

    参考
    https://stackoverflow.com/questions/7145606/how-do-you-save-store-objects-in-sharedpreferences-on-android

    使用 gson 这个库,将对象序列化,然后存储。

    参考

    • https://developer.android.com/training/data-storage/shared-preferences
    • https://www.digitalocean.com/community/tutorials/android-shared-preferences-example-tutorial

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式