不同于文件的存储方式,SharedPreferences是使用键值对的额方式来存储数据的。也就是说当保存一套数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。而且SharedPreferences还支持多种不同的数据类型存储。存储的数据和读取的数据类型一致。

SharedPreferences的用法

Android提供了三种方法用于得到SharedPreferences对象。
1. Context类中的getSharedPreferences()方法
此方法接收两个参数,第一个参数用于指定SharedPreferences文件的名称,如果指定的文件不存在则会创建一个。SharedPreferences文件都是存放在/data/data/<packagename>/shared_prefs/目录下的。第二个参数用于制定操作模式,主要有两种模式可以选择,默认的MODE_PRIVATE和MODE_MULTI_PROCESS,MODE_PRIVATE表示只有当前的应用程序才可以对这个SharedPreferences文件进行读写。另一种模式则一般用于会有多个进程中对同一个SharedPreferences文件进行读写的情况。与文件存储一样有两种操作模式被抛弃。
2. Activity类中的gerPreferences()方法
这个方法跟Contexet中的方法相类似,不同之处是该方法只接受一个操作模式作为参数,因为使用这个方法是会自动将当前活动的类名作为SharedPreferences的文件名
3. PreferenceManager类中的gerDefaultSharedPreferences()方法,它只接受一个Context参数,并自动使用当前应用程序的报名作为前缀来命名SharedPreferences文件。

得到SharedPreferences对象之后,就可以开始向文件中存储数据了,存储数据分为三步
1. 调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象。
2. 向SharedPreferences.Editor对象中用(put+数据类型)方法添加数据
3. 调用commit()方法将添加的数据提交,从而完成数据存储操作。

同样定义输入框用来获得将要写入的数据和显示数据的文本框,定义两个按钮来完成两个读写两个事件。

<TextView
        android:id="@+id/textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="显示读取的数据"/>
    <EditText
        android:id="@+id/edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="写入数据"/>
    <Button
        android:id="@+id/button_write"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="写入数据"/>
    <Button
        android:id="@+id/button_read"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="读取数据"/>

在MainActivity中添加两个点击事件完成读写操作

private void read() {
        //SharedPreferences preferences=getSharedPreferences("content_prefs",MODE_PRIVATE);
        SharedPreferences preferences=getPreferences(MODE_PRIVATE);
        String data=preferences.getString("content","DefaultValue");
        mEditText.setText("");
        mTextView.setText(data);
    }

    private void write() {
        //SharedPreferences preferences=getSharedPreferences("content_prefs",MODE_PRIVATE);//Context中的方法
        SharedPreferences preferences=getPreferences(MODE_PRIVATE);//Activity中的方法
        editor=preferences.edit();
        editor.putString("content",mEditText.getText().toString());
        editor.commit();
    }

SharedPreferences存储数据失败 sharedpreferences如何存储数据_数据类型


MainActivity那个文件就是使用的是Activity中的方法。