zoukankan      html  css  js  c++  java
  • SharedPreferences 存储

    【Android】SharedPreferences 存储

    Android 提供多种选项来保存永久性数据。不同的存储方案取决于不同的需求。

    存储选项 
    共享首选项 在键值对中存储私有原始数据。(SharedPreferences)
    内部存储 在设备内存中存储私有数据。
    外部存储 在共享的外部存储中存储公共数据。(注意申请读写权限)
    SQLite 数据库 在私有数据库中存储结构化数据。
    网络连接 在网络中使用您自己的网络服务器存储数据。

    SharedPreferences 框架

    SharedPreferences 以 Map 形式存放简单的配置参数,可以用来保存任何原始数据:布尔值、浮点值、整型值、长整型和字符串。 此数据将跨多个用户会话永久保留(即使您的应用已终止亦如此)。

    其数据保存在 /data/data/xxx/shared_prefs 目录下,普通用户日常操作中难以修改到,所以存储一些轻量级的数据比较简单方便。

    (注意,从名字上就知道不完全,重要数据请采用内部存储或者数据库加密等机制)。

    1. 获取 SharedPreferences


    private static final String PREFS_NAME = "TEST_SharedPreferences";
    private static SharedPreferences mSharedPreferences = null;
    
    @Override
    protected void onCreate(Bundle state){
        super.onCreate(state);
    
        ...
    
        // Restore preferences
        mSharedPreferences = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
    }
    

    getSharedPreferences 参数说明


    SharedPreferences getSharedPreferences(String name, int mode);
    

     说明
    name 用于指定 SharedPreferences 文件的名称,如果指定的文件不存在则会创建一个
    mode 用于指定操作模式,下面 Context.MODE_xxx 的类型
    Context.MODE_PRIVATE 指定该 SharedPreferences 数据只能被本应用程序读、写。(默认值,值为 0 )
    Context.MODE_WORLD_READABLE 指定该 SharedPreferences 数据能被其他应用程序读,但不能写。(Android N 开始不再支持)
    Context.MODE_WORLD_WRITEABLE 指定该 SharedPreferences 数据能被其他应用程序读。(Android N 开始不再支持)
    Context.MODE_APPEND 该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

    2. 读取数据

    根据获取数据的类型不同,主要形式为:mSharedPreferences.getXXX(key, defValue)

    接口如下:


    Map<String, ?> getAll();                                                 // 获取该 SharedPreferences 对象下所有的数据,以 Map 的形式返回。
    String getString(String key, 

    如:

    获取 key 为 "作者" 的 String 类型数据。

    获取 key 为 "年龄" 的 int 类型数据。

    通过:


    mSharedPreferences.getString("作者", "#查无此人#");
    mSharedPreferences.getInt("年龄", -1);
    

    成功将返回 key 为 "作者" 对应的数据(类型为 String),失败将返回 defValue (即 "#查无此人#")。

    成功将返回 key 为 "年龄" 对应的数据(类型为 int),失败将返回 defValue (即 -1)。

    3. 写入数据

    SharedPreferences 类型的对象属于“只读”的,不可以通过 SharedPreferences 对象进行数据的修改。

    写入或修改数据,需要获取 SharedPreferences.Editer 类型的数据。

    如:

    修改 key 为 "作者" 的数据为 "奔波儿灞" (类型 String)

    新增 key 为 "著作" 的数据为 "《大王叫我来巡山啊...》" (类型 String)

    根据存入数据的类型不同,主要形式为:mSharedPreferences.putXXX(key, value)


        SharedPreferences.Editor edit = mSharedPreferences.edit();
        edit.putString("作者", "奔波儿灞");                            // 已有 key , 将更新。
        edit.putString("著作", "《大王叫我来巡山啊...》");              // 未有 key , 将新增。
        edit.commit();                                                // 必须提交了,
    

    具体写入接口如下:


        Editor putString(String key, @Nullable String value);           // 存入名为 key , 值为 value (类型为 String ) 的数据.
        Editor putStringSet(String key, @Nullable Set<String> values);  // 存入名为 key , 值为 value (类型为 Set<String> ) 的数据.
        Editor putInt(String key, int value);                           // 存入名为 key , 值为 value (类型为 int ) 的数据.
        Editor putLong(String key, long value);                         // 存入名为 key , 值为 value (类型为 long ) 的数据.
        Editor putFloat(String key, float value);                       // 存入名为 key , 值为 value (类型为 float ) 的数据.
        Editor putBoolean(String key, boolean value);                   // 存入名为 key , 值为 value (类型为 boolean ) 的数据.
    

    注意,写入设置完,必须 commit 。( commit 返回值 true 表示提交成功,有时候使用 SharedPreferences 出错注意查看返回值 )

    因为对应的 SharedPreferences.Editor 数据与 SharedPreferences 数据不是存在同一个地方的。

    需要使用 commit 同步 SharedPreferences 的数据并写入 xml 文件中。

    4. 删除数据

    可以删除单个 key 对应的数据,也可以清空所有数据。

    删除单个数据


        SharedPreferences.Editor edit = mSharedPreferences.edit();
        edit.remove("年龄");
        edit.remove("著作");
        edit.commit();            // 必须 commit
    

    清空所有数据


        SharedPreferences.Editor edit = mSharedPreferences.edit();
        edit.clear();
        edit.commit();            // 必须 commit


    作者:ZONE画派
    链接:https://www.jianshu.com/p/8f22c6758073
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    用醋泡脚有什么好处
    用姜泡脚有什么好处
    坚持跑步与读书,方不辜负此生
    干货!几招教你降低论文重复率!!
    Android Handler 源码分析(详细)
    教你控制 RecyclerView 滑动的节奏
    鸟哥的Linux私房菜:基础学习篇 —— 第六章笔记
    鸟哥的Linux私房菜:基础学习篇 —— 第五章笔记
    synchronized(this) 与synchronized(class) 之间的区别
    Android 扩大 View 的点击区域
  • 原文地址:https://www.cnblogs.com/liumin-txgt/p/13155951.html
Copyright © 2011-2022 走看看