Android学习:利用SharedPreferences存储数据

时间:2025-04-08 18:56:30

Android学习:利用SharedPreferences存储数据

SharedPreferences是Android系统提供的一种轻量级的数据存储方式,主要用来存储一些简单的数据,如系统登录的用户名和密码等,或者存储常用的系统配置信息,如窗口状态等。

SharedPreferences可以保存和检索的各种基本数据类型(boolean、float、int、long、string)的持久键值对,是基于XML文件存储的key-value键值对数据,该XML文件存储在手机的data/data/<package name>/shared_prefs目录下。

利用SharedPreferences进行数据存取的基本用法如下:

(1)获取SharedPreferences对象

可以通过两种方式获取SharedPreferences对象。

方法一:调用Context对象的getSharedPreferences()方法,基本代码如下:

getSharedPreferences(String name,int mode);

方法二:调用Activity对象的getPreferences()方法,基本代码如下:

getPreferences(int mode);

根据参数name,可以获取相应的SharedPreferences对象,name表示要操作的XML文件名;参数mode有以下几个可选值。

Context.MODE_PRIVATE : 指定该SharedPreferences数据只能被本应用程序进行读、写操作。

Context.MODE_WORLD_WRITEABLE :指定该SharedPreferences数据能被其他应用读,写。

Context.MODE_WORLD_READABLE :指定该SharedPreferences数据能被其他应用程序读,但是不能写。

Context.MODE_MULTI_PROCESS : 这是SDK 2.3之后添加的选项,当多个进程读写同一个SharedPreferences时,它会检查文件是否被修改。

以上两种方法的区别:

第一种方法(getSharedPreferences())获取的SharedPreferences对象可以被同一应用程序下的其他组件共享;

第二种方法(getPreferences())获取的SharedPreferences对象只能在该Activity中使用

(2)向 SharedPreferences中写入值

首先,通过获取Editor对象。

然后,使用对应具体数据类型的Editor的相应方法(如putBoolean()或putString()等)来存入值。

最后,调用Editor的commit()方法提交写入值的操作。

另外,Editor还有两个常用的方法,用来从Preferences中移除键值。

(String key): 用于下次通过commit()方法提交操作时移除key对应的键值对。

(): 用于移除所有键值对。

(3)从SharedPreferences中读写值

使用对应具体数据类型的Editor的相应方法getXxxx()来读取键值。

示例:开发一个Android应用程序,利用SharedPreferences来存储当前输入的用户名和密码信息,通过单击相应的功能按钮,来实现数据的保存、提取和移除所有键值对等基本功能。

XML布局代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:andro
    xmlns:app="/apk/res-auto"
    xmlns:tools="/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    tools:context=".e13_1.MainActivity">
​
    <TextView
        android:
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="利用SharedPreferences存储数据"
        android:textColor="@android:color/black"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="用户名:"
            android:textColor="@android:color/black"/>
        <EditText
            android:
            android:layout_width="120dp"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密码:"
            android:textColor="@android:color/black"/>
        <EditText
            android:
            android:layout_width="120dp"
            android:layout_height="wrap_content" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal">
        <Button
            android:
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="保存数据"/>
        <Button
            android:
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="提取数据"/>
        <Button
            android:
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="移除键值对"/>
    </LinearLayout>
​
</LinearLayout>
​

文件:

import ;
import ;
import .;
import ;
import ;
import ;
import ;
import ;
​
public class MainActivity extends AppCompatActivity {
​
    //定义各个控件
    private EditText username;
    private EditText password;
​
    //1.定义要保存SharedPreferences的XML文件
    String PREFS_NAME = "ex13_1.mySharedPreferences.unm_pwd";
​
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        (savedInstanceState);
        setContentView(.activity_main);
        username = (EditText) findViewById(.editText1);
        password = (EditText) findViewById(.editText2);
        final Button button1 = (Button)findViewById(.button1);
        final Button button2 = (Button)findViewById(.button2);
        final Button button3 = (Button)findViewById(.button3);
        //数据保存
        (new () {
            @Override
            public void onClick(View v) {
                //2.定义一个只允许本程序访问的SharedPreFerences对象
                SharedPreferences settings = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
                //3.生成一个保存编辑变量
                 editor = ();
                //4.添加要保存的键值和真值
                ("username",().toString());
                ("password",().toString());
                //5.提交数据保存
                ();
                //清空输入
                ("");
                ("");
                (,"数据保存完成",Toast.LENGTH_LONG).show();
            }
        });
        //数据提取
        (new () {
            @Override
            public void onClick(View v) {
                //提取保存的用户名,如果无则为空
                (getUserName());
                //提取保存的密码,如果无则为空
                (getPassWord());
                (,"数据提取完成",Toast.LENGTH_LONG).show();
            }
        });
        //移除所有键值对
        (new () {
            @Override
            public void onClick(View v) {
                SharedPreferences settings = getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
                //生成一个保存编辑对象
                 editor = ();
                //移除所有键值对
                ();
                ();
                ("");
                ("");
                (,"移除所有键值对成功",Toast.LENGTH_LONG).show();;
            }
        });
    }
    private String getUserName(){
​
        SharedPreferences settings = getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
        //获取一个键值为"username"的值,若Preference中不存在,就用后面的值作为返回值
        String username = ("username","");
        return username;
​
    }
    private String getPassWord(){
​
        SharedPreferences settings = getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
        //获取一个键值为"username"的值,若Preference中不存在,就用后面的值作为返回值
        String password = ("password","");
        return password;
​
    }
}
​

运行即可。