SharedPreferences是Android中一种轻型的数据存储类。本质上是基于XML文件进行存储Key-Value键值对的数据,生成的XML文件的目录在/data/data/包名/Shared_Pref/下。主要是用来存储一些简单的配置信息,如登录时是否保存用户名密码等。

SharedPreferences本身只能获取数据而不支持存储或修改,存储修改是通过SharedPreferences的一个内部接口Editor来实现的。

实现SharedPreferences存储的步骤如下:

① 获取SharedPreferences对象;

② 获取SharedPreferences.Editor对象;

③ 通过Editor接口的putXxx方法保存K-V键值对。Xxx表示不同的数据类型(float,int,String,boolean,long);

④ 使用Editor接口的commit方法进行操作的提交。

使用SharedPreferences的过程比较简单,下面通过一个保存用户名的小案例演示一下SharedPreferences的简单使用。

主布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:orientation="horizontal"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tvUsername"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="14dp"
android:text="用户名"
android:textSize="20dp"
android:textAlignment="center"/>
<EditText
android:id="@+id/etUsername"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Base.V7.Widget.AppCompat.EditText"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp">
<TextView
android:id="@+id/tvPassword"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="14dp"
android:text="密 码"
android:textSize="20dp"
android:textAlignment="center"/>
<EditText
android:id="@+id/etPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:theme="@style/Base.V7.Widget.AppCompat.EditText"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp">
<TextView
android:id="@+id/tvRememberUsername"
android:text="保存用户名"
android:textSize="15dp"
android:layout_marginLeft="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<CheckBox
android:id="@+id/cbRememberUsername"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp">
<Button
android:id="@+id/btnLogin"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginRight="15dp"
android:layout_marginLeft="10dp"
android:layout_height="60dp"
android:text="登录"
android:textSize="20dp"/> <Button
android:id="@+id/btnCancel"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_marginRight="10dp"
android:layout_marginLeft="5dp"
android:layout_height="60dp"
android:text="取消"
android:textSize="20dp"/> </LinearLayout>
</LinearLayout>

activity_main

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//声明控件
private EditText etUsername, etPassword;
private TextView tvUsername, tvPassword, tvSaveUsername;
private CheckBox cbSaveUsername;
private Button btLogin, btCancel;
//声明SharedPreferences对象
private SharedPreferences preferences;
//声明Editor对象
private SharedPreferences.Editor editor; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();//初始化控件
/**
* 通过getSharedPreferences方法获取SharedPreferences对象,
* getSharedPreferences(String name,int mode)
* name: 生成的XML文件的名字
* mode: 生成的XML文件的权限(是否能被其他程序读取等)
*
* 也可以使用PreferenceManager.getDefaultSharedPreferences(this)获取SharedPreferences对象,
* 这样生成的XML文件名为: 包名+“_preferences”
* XML权限为:MODE_PRIVATE
*/
// preferences = PreferenceManager.getDefaultSharedPreferences(this);
preferences = getSharedPreferences("myPref", MODE_PRIVATE);
//获取Editor对象
editor = preferences.edit();
//通过SharedPreferences对象的getXxx方法获取Key对应的Value,第二个参数为默认值
String name = preferences.getString("username", "");
//如果name为空,说明还未进行过用户名的存储
if (name == null) {
cbSaveUsername.setChecked(false);
} else {//如果不为空则将已存储的用户名自动填写到编辑框中
cbSaveUsername.setChecked(true);
etUsername.setText(name);
} } //初始化控件
private void initViews() {
etUsername = (EditText) findViewById(R.id.etUsername);
etPassword = (EditText) findViewById(R.id.etPassword);
tvUsername = (TextView) findViewById(R.id.tvUsername);
tvPassword = (TextView) findViewById(R.id.tvPassword);
tvSaveUsername = (TextView) findViewById(R.id.tvRememberUsername);
cbSaveUsername = (CheckBox) findViewById(R.id.cbRememberUsername);
btLogin = (Button) findViewById(R.id.btnLogin);
btCancel = (Button) findViewById(R.id.btnCancel);
btLogin.setOnClickListener(this);
btCancel.setOnClickListener(this);
} //按钮点击事件
@Override
public void onClick(View v) {
//获取到编辑框中的用户名和密码
String name = etUsername.getText().toString();
String pass = etPassword.getText().toString(); switch (v.getId()) {
//登录按钮的点击处理
case R.id.btnLogin:
//如果用户名和密码合法
if ("admin".equals(name) && "abc123".equals(pass)) {
//如果勾选了保存用户名的复选框,则将用户名存储到XML文件中
if (cbSaveUsername.isChecked()) {
editor.putString("username", name);
} else {//如果没有勾选则将用户名从XML文件中移除(如果有的话)
editor.remove("username");
}
//使用Editor对象操作后,需要调用commit方法进行提交,不然所有的操作都无效。类似与数据库中事务的提交
editor.commit();
Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "登录失败", Toast.LENGTH_SHORT).show();
}
break;
case R.id.btnCancel:
break;
}
}
}

完整源码 :  点击下载

作者:caobotao
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

Android数据存储之SharedPreferences使用的更多相关文章

  1. Android数据存储-通过SharedPreferences实现记住密码的操作

    在Android中登陆中,为了实现用户的方便,往往需要根据用户的需要进行记住密码的操作,所以,在Android数据存储中SharedPreferences恰恰可以实现这一点 下面,小编将带领大家通过S ...

  2. Android数据存储方式--SharedPreferences

    Android数据存储方式有如下四种:SharedPreferences.存储到文件.SQLite数据库.内容提供者(Content provider).存储到网络服务器. 本文主要介绍一下Share ...

  3. Android 数据存储之 SharedPreferences储存

    ------------------------------------------SharedPreferences存储--------------------------------------- ...

  4. Android数据存储三剑客——SharedPreferences、File、SQLite

    Android中常用的数据存储一般有三种方式:SharedPreferences.文件和SQLite数据库,用来保存需要长时间保存的数据.本文将通过几个具体的小实例来讲解这三种方式的具体实现. 数据存 ...

  5. Android数据存储之SharedPreferences存储

    安卓系统为应用提供了系统级的配置存储方案,它就是靠SharedPreferences接口来实现的,该接口存储的所有信息都是以名值对的形式保存,但其保存的数据类型也仅限于基本数据类型,如字符串.整形.布 ...

  6. android数据存储之SharedPreferences

    一.SharedPreferences简介      (1)SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activ ...

  7. Android数据存储之SharedPreferences及如何安全存储

    前言: 最近一直在学习ios的数据存储,当学习到NSUserDefaults的时候让我回想起了SharedPreferences,今天闲来无事,想着总结一下SharedPreferences的使用. ...

  8. Android数据存储之sharedpreferences与Content Provider

    android中对数据操作包含有: file, sqlite3, Preferences, ContectResolver与ContentProvider前三种数据操作方式都只是针对本应用内数据,程序 ...

  9. Android数据存储:Shared Preferences

    Android数据存储之SharedPreferences 在Android系统中提供了多种存储技术.通过这些存储技术可以将数据存储在各种存储介质上, Android 为数据存储提供了如下几种方式:1 ...

随机推荐

  1. ReactiveX 学习笔记(24)使用 RxCpp + C++ REST SDK 调用 REST API

    JSON : Placeholder JSON : Placeholder (https://jsonplaceholder.typicode.com/) 是一个用于测试的 REST API 网站. ...

  2. 清理SqlServer日志

    最近做一个数据采集的项目,使用SQLSserver2014数据库 没想到数据才采集两三天,C盘空间已经剩下8M 连忙看了一下SQLSerevr数据库文件夹 位于 C:\Program Files\Mi ...

  3. springboot整合devtool无法热部署

    参见https://www.cnblogs.com/winner-0715/p/6666579.html.

  4. ToolBar+Drawable实现一个好用的侧滑栏(侧边栏)和工具栏

    先参考下ToolBar的使用和DrawableLayout的使用: 1.主界面布局,主要结构包含一个ToolBar和一个DrawableLayout,DrawableLayout里面有左侧边栏布局和主 ...

  5. node.js中express框架的基本使用

    express是一个基于node.js平台的,快速,开放,极简的web开发框架. 一.安装 express npm install express --save 二.简单使用 express //引入 ...

  6. 数字提取——C语言

    Problem Description AekdyCoin is the most powerful boy in the group ACM_DIY, whose signature is valu ...

  7. javascript函数闭包(closure)

    一,首先感受下javascript函数的闭包 二,闭包 1,定义:闭包就是能够读取其他函数内部变量的函数,由于在javascript语言中,只有在函数内部的子函数才能够读取局部变量,因此可以把闭包简单 ...

  8. 如何自行搭建一个威胁感知大脑 SIEM?| 硬创公开课

    如何自行搭建一个威胁感知大脑 SIEM?| 硬创公开课 本文作者:谢幺 2017-03-10 10:09 专题:硬创公开课 导语:十年安全产品经验的百度安全专家兜哥,手把手教你用开源项目搭建SIEM安 ...

  9. css初始

    css概念及作用 css即层叠样式表的英文缩写 作用:1 渲染页面   2 页面布局 css语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. 格式: selector{ prope ...

  10. MongoDB、Hbase、Redis等NoSQL分析

    NoSQL的四大种类 NoSQL数据库在整个数据库领域的江湖地位已经不言而喻.在大数据时代,虽然RDBMS很优秀,但是面对快速增长的数据规模和日渐复杂的数据模型,RDBMS渐渐力不从心,无法应对很多数 ...