Android:SharedPreferences 数据存取

SharedPreferences#

很多软件都有配置文件,存放程序运行的属性值,如默认欢迎语、登录用户名和密码等。配置用信息的量并不大,采用数据库来存放的话,数据库的连接和数据的操作较为耗时,会影响程序的效率。Android提供了SharedPreferences机制来实现轻量级的数据存储,以键值对(key,value)的方式存储信息。

获得 SharedPreferences 对象#

获得 SharedPreferences 对象有两种方式,第一种是通过 getSharedPreferences() 方法得到 SharedPreferences 对象。

Copy Highlighter-hljs
public abstract SharedPreferences getSharedPreferences (String name, int mode);
参数 说明
name 保存后 xml 文件的名称
mode xml 文档的操作权限模式

SharedPreferences 有 4 种操作模式:

操作模式 说明
Context.MODE_PRIVATE 默认操作模式,代表该文件是私有数据,只能被应用本身访问,写入的内容会覆盖原文件的内容
Context.MODE APPEND 检查文件是否存在,存在就向文件追加内容,否则就创建新文件
Context.MODE_WORLD_READABLE 当前文件可以被其他应用读取
Context.MODE_WORLD_WRITEABLE 当前文件可以被其他应用写入

第二种是通过 PreferenceManager.getSharedPreferences(Context) 方法获取 SharedPreferences 对象,不能指定 xml 文件名,文件名使用默认的 < package name >+"_preferences.xml" 形式。

数据存入和读取#

读写 SharedPreferences 数据要用到 SharedPreferences 接口的 Editor 对象。

Copy Highlighter-hljs
public abstract SharedPreferences.Editor edit();

数据存入时通过 SharedPreferences.Editor 接口的 putXxx 方法上传 key-value 对。其中 Xxx 表示不同的数据类型,例如字符串类型的 value 需要用 putString() 方法。

Copy Highlighter-hljs
public abstract SharedPreferences.Editor putString(String key, String value);

通过 SharedPreferences.Editor 接口的 commit 方法保存 key-value 对,commit 方法在事件结束后进行提交,将数据保存在数据库中。

Copy Highlighter-hljs
public abstract boolean commit();

数据读取时通过 SharedPreferences 对象的键 key 获取对应 key 的键值,不同类型的键值有不同的函数如 getBoolean、getInt、getFloat 和 getLong 等。

Copy Highlighter-hljs
public abstract String getString (String key, String defValue);

SharedPreferences 样例#

程序需求#

使用 SharePreferences 编写信息簿记住用户名、城市及性别等信息,当 APP 退出再次启动能够显示用户输入的信息。

代码编写#

activity_main#

Copy Highlighter-hljs
<?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="match_parent"     android:layout_height="match_parent"     tools:context=".MainActivity"     android:orientation="vertical">     <LinearLayout         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:orientation="horizontal">     <TextView         android:id="@+id/name"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:text="用户名"         android:textSize="15dp"/>     <EditText         android:id="@+id/ename"         android:layout_width="150sp"         android:layout_height="40sp">     </EditText>     </LinearLayout>     <LinearLayout         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:orientation="horizontal">         <TextView             android:id="@+id/city"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:text="城 市 "             android:textSize="15dp"/>         <EditText             android:id="@+id/ecity"             android:layout_width="150sp"             android:layout_height="40sp">         </EditText>     </LinearLayout>     <LinearLayout         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:orientation="horizontal">         <RadioGroup             android:id="@+id/radioGroup1"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:orientation="horizontal" >         <RadioButton             android:id="@+id/man"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="男" />         <RadioButton             android:id="@+id/woman"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="女" />     </RadioGroup>     </LinearLayout> <Button     android:id="@+id/submit"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="提交"> </Button> </LinearLayout>

MainActivity#

Copy Highlighter-hljs
package com.example.share; import android.content.Context; import android.content.SharedPreferences; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity {     private EditText ename;     private EditText city;     private RadioGroup rg;     private RadioButton man;     private RadioButton woman;     private RadioButton radioButton;     private Button button;     private SharedPreferences preferences;     private SharedPreferences.Editor editor;     private String text;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         //绑定对应布局控件         rg = (RadioGroup) findViewById(R.id.radioGroup1);         ename = (EditText) findViewById(R.id.ename);         city = (EditText) findViewById(R.id.ecity);         man = (RadioButton) findViewById(R.id.man);         woman=(RadioButton)findViewById(R.id.woman);         button = (Button) findViewById(R.id.submit);         SharedPreferences sharedPreferences = getSharedPreferences("test", MODE_PRIVATE);         //如果不为空         if (sharedPreferences != null) {             String nname = sharedPreferences.getString("name", "");             String ecity = sharedPreferences.getString("city", "");             text = sharedPreferences.getString("sex", "");             ename.setText(nname);             city.setText(ecity);             if (text.toString().equals("男")){                 man.setChecked(true);             }             if (text.toString().equals("女")) {                 woman.setChecked(true);             }         }         button.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 //1 创建 SharePreferences 对象                 radioButton = (RadioButton)findViewById(rg.getCheckedRadioButtonId());                 String name = ename.getText().toString();                 String ecity = city.getText().toString();                 String sex = radioButton.getText().toString();                 SharedPreferences sharedPreferences = getSharedPreferences("test", MODE_PRIVATE);                 SharedPreferences.Editor editor = sharedPreferences.edit();                 //2  创建Editor对象,写入值                 editor.putString("name", name);                 editor.putString("city", ecity);                 editor.putString("sex", sex);                 //3  提交                 editor.commit();                 Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_LONG).show();             }         });     } }

运行效果#

第一次打开 APP 的效果如下:

输入信息后,再次打开 APP 将显示之前输入的信息:

参考资料#

《Android 移动应用开发》,杨谊 主编、喻德旷 副主编,人民邮电出版社

posted @   乌漆WhiteMoon  阅读(322)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2021-01-29 Java 课程设计:LWZ - Online Judge学生端(裁判机部分)
2021-01-29 Java 课程设计:LWZ - Online Judge学生端(数据库设计部分)
点击右上角即可分享
微信分享提示
CONTENTS