zoukankan      html  css  js  c++  java
  • 10.Android-SharedPreferences使用

    1.SharedPreferences介绍

    SharedPreferences,它是一个轻量级的配置文件类,用于保存软件配置参数. 采用xml文件形式存储在/data/data/包名/shared_prefs/

    优点在于:

    • 轻量级,以键值对的方式进行存储,使用方便,易于理解
    • 程序卸载后会也会一并被清除,不会残留信息

    缺点在于:

    • 不支持跨多个进程使用
    • 键值数据如果过多,会导致界面卡顿


    2.如何获取SharedPreferences

    2.1 通过Context .getSharedPreferences()方法

    public SharedPreferences getSharedPreferences(String name, int mode);
    //name:指定文件名称
    //mode: 可以填入MODE_PRIVATE(文件只能由调用应用程序访问)、
    //MODE_APPEND(追加内容模式)、MODE_WORLD_READABLE(文件支持所有人可读)、MODE_WORLD_WRITEABLE(文件支持所有人可写)

    2.2 通过Activity 类中的 getPreferences()方法

    public SharedPreferences getPreferences(int mode);
    //mode: 可以填入MODE_PRIVATE(文件只能由调用应用程序访问)、MODE_APPEND(追加内容模式)、MODE_WORLD_READABLE(文件支持所有人可读)、MODE_WORLD_WRITEABLE(文件支持所有人可写)
    //生成的配置文件名字会默认将当前活动的类名作为文件名.比如在MainActivity类下使用的,则会生成MAinActivity.xml

    2.3 通过PreferenceManager中的静态public getDefaultSharedPreferences()方法

    public static SharedPreferences getDefaultSharedPreferences(Context context);
    //mode会自动设置为MODE_PRIVATE(文件只能由调用应用程序访问)
    //生成的配置文件名字会默认将包名作为文件名.

    PS:后面示例会演示。

     

    3.如何通过SharedPreferences来读写配置参数

    通过下面方法来进行读操作:

     

    上面的第二个参数defValue:表示默认值,如果key值未找到,则将defValue默认值返回过来

    通过Editor edit()成员方法来获取Editor类来实现写操作,如下所示:

     

    Editor类下的常用方法有:

    Editor putInt(String key, int value); //向key键里写入int类型的值
    Editor putString(String key, String value);   //向key键里写入String类型的值
    Editor putStringSet(String key, Set<String> values);    //向key键里写入Set类型的值
    boolean commit();          //提交数据,写入io

    4.使用3种方法生成SharedPreferences配置文件示例

    写MainActivity.java的onCreate():

    public class MainActivity extends Activity {
    
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            SharedPreferences sp1 = MainActivity.this.getSharedPreferences("info1", MODE_PRIVATE);
            //写入数据
            Editor edit1 = sp1.edit();
            edit1.putString("name", "test1");
            edit1.commit();                
            //读取数据
            Log.v("MainActivity","sp1: "+sp1.getString("name", ""));
    
            SharedPreferences sp2 = MainActivity.this.getPreferences(MODE_PRIVATE);
            //写入数据
            Editor edit2 = sp2.edit();
            edit2.putString("name", "test2");
            edit2.commit();
            //读取数据
            Log.v("MainActivity","sp2: "+sp1.getString("name", ""));
    
            SharedPreferences sp3 = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
            //写入数据
            Editor edit3 = sp3.edit();
            edit3.putString("name", "test3");
            edit3.commit();
            //读取数据
            Log.v("MainActivity","sp3: "+sp1.getString("name", ""));
    }

    运行后,可以看到在data/data/com.example.sdreadWrite/shared_prefs下自动生成了3个xml文件:

     

    • info1.xml: 通过MainActivity.this.getSharedPreferences("info1", MODE_PRIVATE);实现的
    • MainActivity.xml: 通过MainActivity.this.getPreferences(MODE_PRIVATE);实现的
    • com.example.sdreadWrite_preferences.xml: 通过PreferenceManager.getDefaultSharedPreferences(MainActivity.this);实现的

    打开info1.xml试试:

     

    打开log打印(可以看到读出来的内容和XML配置一样):

  • 相关阅读:
    入浅出MySQL 8.0 lock_sys锁相关优化 原创 腾讯数据库技术 腾讯数据库技术 2021-03-08
    以模型为中心,携程契约系统的演进
    bs
    外观模式
    设计接口时严格区分map、list,方便前端使用。
    t
    The HyperText Transfer Protocol (HTTP) 504
    入理解 epoll 原创 冯志明 Qunar技术沙龙 2021-03-10
    一次XSS和CSRF的组合拳进攻 (CSRF+JSON)
    当程序员具备了抽象思维 从码农到工匠 阿里巴巴中间件 2021-03-09
  • 原文地址:https://www.cnblogs.com/lifexy/p/12172530.html
Copyright © 2011-2022 走看看