20.Android开发笔记:持久化(二):SharedPreferences存储

2.SharedPreferences存储

SharedPreferences是使用键值对的方式来存储数据的。
也就是说,当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。
而且SharedPreferences还支持多种不同的数据类型存储,
如果存储的数据类型是整型,那么读取出来的数据也是整型的;
如果存储的数据是一个字符串,那么读取出来的数据仍然是字符串。

SharedPreferences文件都是存放在 /data/data/<package name>/shared_prefs/ 目录下的。

2.1 获取SharedPreferences有3个方法

  • context类中的getSharedPrefences()方法
    此方法接收两个参数,第一个参数用于指定SharedPreferences文件的名称,如果指定的文件不存在则会创建一个,SharedPreferences文件都是存放在/data/data//shared_prefs/目录下的。第二个参数用于指定操作模式,目前只有MODE_PRIVATE这一种模式可选,它是默认的操作模式,和直接传入0效果是相同的,表示只有当前的应用程序才可以对这个SharedPreferences文件进行读写。其他几种操作模式均已被废弃

  • Activity类中的getSharedPrefences()方法
    这个方法和Context中的getSharedPreferences()方法很相似,不过它只接收一个操作模式参数,因为使用这个方法时会自动将当前活动的类名作为SharedPreferences的文件名。

  • PreferenceManager类中的getSharedPrefences()方法 (已废弃)
    这是一个静态方法,它接收一个Context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。得到了SharedPreferences对象之后,

2.2 SharedPreferences文件中存储数据

开始向SharedPreferences文件中存储数据了,主要可以分为3步实现。

  • (1) 调用 SharedPreferences 对象的 edit()方法来获取一个SharedPreferences.Editor 对象。
  • (2) 向 SharedPreferences.Editor对象中添加数据,比如添加一个布尔型数据就使用putBoolean()方法,添加一个字符串则使用putString()方法,以此类推。
  • (3) 调用 apply()方法将添加的数据提交,从而完成数据存储操作。

        Button btn_save = findViewById(R.id.btn_save);
        btn_save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                SharedPreferences sharedPreferences = getSharedPreferences("my_shared_pres", MODE_PRIVATE);
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putString("name", "Kevin");
                editor.putInt("age",29);
                editor.putBoolean("married", false);
                editor.apply();
            }
        });
    }

进入/data/data/com.example.sharedpreferencestest/shared_prefs/目录下,可以看到生成了一个my_shared_pres.xml`文件,


<?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
<map> 
  <boolean name="married" value="false" /> 
  <string name="name">Kevin</string> 
  <int name="age" value="29" /> 
</map>

执行修改 editor.putInt("age",28); 后:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
<map> 
  <boolean name="married" value="false" /> 
  <string name="name">Kevin</string> 
  <int name="age" value="28" /> 
</map>

2.3 从SharedPreferences文件中读取数据

        Button btn_restore = findViewById(R.id.btn_restore);
        btn_restore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences sharedPreferences = getSharedPreferences("my_shared_pres", MODE_PRIVATE);
                String name = sharedPreferences.getString("name", "");
                int age = sharedPreferences.getInt("age",0);
                boolean married = sharedPreferences.getBoolean("married", false);

                Toast.makeText(MainActivity.this,
                        "name:" +name +"age:" + age + "married:" + String.valueOf(married),
                        Toast.LENGTH_SHORT )
                        .show();

            }
        });
posted @ 2020-03-20 23:06  easy5  阅读(162)  评论(0)    收藏  举报