Android学习:利用SharedPreferences存储数据

2023-04-10 11:38:25

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中写入值

首先,通过SharedPreferences.Editor获取Editor对象。

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

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

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

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

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

(3)从SharedPreferences中读写值

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

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

XML布局代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    tools:context="zut.edu.e13_1.MainActivity">

    <TextView
        android:id="@+id/textView1"
        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:id="@+id/editText1"
            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:id="@+id/editText2"
            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:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="保存数据"/>
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="提取数据"/>
        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="移除键值对"/>
    </LinearLayout>

</LinearLayout>

MainActivity.java文件:

 
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

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) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        username = (EditText) findViewById(R.id.editText1);
        password = (EditText) findViewById(R.id.editText2);
        final Button button1 = (Button)findViewById(R.id.button1);
        final Button button2 = (Button)findViewById(R.id.button2);
        final Button button3 = (Button)findViewById(R.id.button3);
        //数据保存
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //2.定义一个只允许本程序访问的SharedPreFerences对象
                SharedPreferences settings = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
                //3.生成一个保存编辑变量
                SharedPreferences.Editor editor = settings.edit();
                //4.添加要保存的键值和真值
                editor.putString("username",username.getText().toString());
                editor.putString("password",password.getText().toString());
                //5.提交数据保存
                editor.commit();
                //清空输入
                username.setText("");
                password.setText("");
                Toast.makeText(MainActivity.this,"数据保存完成",Toast.LENGTH_LONG).show();
            }
        });
        //数据提取
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //提取保存的用户名,如果无则为空
                username.setText(getUserName());
                //提取保存的密码,如果无则为空
                password.setText(getPassWord());
                Toast.makeText(MainActivity.this,"数据提取完成",Toast.LENGTH_LONG).show();
            }
        });
        //移除所有键值对
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences settings = getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
                //生成一个保存编辑对象
                SharedPreferences.Editor editor = settings.edit();
                //移除所有键值对
                editor.clear();
                editor.commit();
                username.setText("");
                password.setText("");
                Toast.makeText(MainActivity.this,"移除所有键值对成功",Toast.LENGTH_LONG).show();;
            }
        });
    }
    private String getUserName(){

        SharedPreferences settings = getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
        //获取一个键值为"username"的值,若Preference中不存在,就用后面的值作为返回值
        String username = settings.getString("username","");
        return username;

    }
    private String getPassWord(){

        SharedPreferences settings = getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
        //获取一个键值为"username"的值,若Preference中不存在,就用后面的值作为返回值
        String password = settings.getString("password","");
        return password;

    }
}

运行即可。

  • 作者:遗憾总将过去
  • 原文链接:https://blog.csdn.net/weixin_52021660/article/details/124718871
    更新时间:2023-04-10 11:38:25