SharedPreferences存储学习笔记

来源:互联网 发布:日本推理小说 知乎 编辑:程序博客网 时间:2024/05/05 19:05

SharedPreferences存储简介

不同于内部存储,SharedPreferences是使用键值对的方式来存储数据的。即每当我们保存一条数据的时候,需要为这条数据提供一个对应的键,然后通过这个键把对应的值取出来。SharedPreferences类提供了一个通用的框架,以便我们能够保存和检索原始数据类型的永久性键值对。我们可以使用SharedPreferences来保存任意类型的数据。当我们存储的数据类型是整型数据,那么读取出来的数据也是整形数据。
因此,使用SharedPreferences进行数据持久化要比内部存储便捷得多。

将数据存储到SharedPreferences中

要使用SharedPreferences存储数据,首先需要获取应用得SharedPreferences对象。
Android中主要提供了三种方法用于得到SharedPreferences对象:

  1. 使用Context类中的getSharedPreferences()方法:如果我们需要多个按名称识别的Preferences文件,应该使用这个方法。此方法接收两个参数,第一个参数用于指定SharedPreferences文件的名称,如果指定的文件不存在,系统则会帮我们创建一个;第二个参数是用于用于指定操作模式,目前只有MODE_PRIVATE这一种模式,与直接输入0的效果相同,是默认的操作模式,表示只有当前的应用程序才可以对这个SharedPreferences文件进行读写。

  2. 使用Activity类的getPreferences()方法,这个方法只接收一个操作模式参数。如果我们只需要一个用于Actiivity的Preferences文件,应该使用这个方法。因为使用这个方法时会自动将当前活动的类名作为SharedPreferences的文件名,因此无需像getSharedPreferences()方法一样提供名称参数。

  3. 使用PreferencesManager中的getDefaultSharedPreferences()方法,这是一个静态方法,接收一个Context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。

获得SharedPreferences对象后,可以通过三个步骤向SharedPreferences文件存储数据。

  1. 调用edit()方法获取SharedPreferences.Editor对象。

  2. 使用putXXX()方法向SharedPreferences.Editor对象添加数据,XXX可以是任意基本数据类型。

  3. 使用commit()或者apply()方法将添加的数据提交。

示例:
布局文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    //添加一个按钮    <Button        android:id="@+id/save_data"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Save data"        /></LinearLayout>

java文件

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button saveData = (Button) findViewById(R.id.save_data);        saveData.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //调用edit()方法获取Editor对象                //并指定SharedPreferences文件名为data                SharedPreferences.Editor editor = getSharedPreferences("data", MODE_PRIVATE)                        .edit();                        //调用putXXX()方法向Editor对象中添加数据                editor.putString("name", "vinfai");                editor.putInt("age", 21);                editor.putBoolean("married", false);                //调用commit()方法提交数据                editor.commit();            }        });    }}

运行程序,使用Android Device Montior的File Explore来查看存储的数据。

Android Device Montior用法:http://blog.csdn.net/vinfai/article/details/55259354

在shared_prefs文件夹下生成了一个data文件。
这里写图片描述

从SharedPreferences中提取数据

SharedPreferences对象中提供了一系列的get()方法,用于对存储数据的读取,与SharedPreferences的putXX()方法一样,get()方法可以读取任意基本数据类型的数据。这些get()方法接收两个参数,第一个是键,传入存储数据时使用的键可以得到该键的对应值;第二个参数是默认值,即表示当传入的键找不到对应值的时候,返回默认值。

修改刚刚的实例:
布局文件:

..    <Button        android:id="@+id/restore_data"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Restore data"        />        ..<LinearLayout

java文件

...Button resotoreData = (Button) findViewById(R.id.restore_data);        resotoreData.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                SharedPreferences preferences = getSharedPreferences("data", MODE_PRIVATE);                String name = preferences.getString("name", "");                int age = preferences.getInt("age", 0);                boolean married = preferences.getBoolean("married", false);                Log.d("MainActivity", "name is " + name);                Log.d("MainActivity", "age is " + age);                Log.d("MainActivity", "married is" + married);            }        });        ...

运行程序后,通过LOG可以看到成功读取存储的数据。
这里写图片描述

0 0