1. 简介

SharedPreferences是一种轻型的数据存储方式,通过key-value键值对的方式将数据存储在xml文件中,常用于存储简单的配置信息。

2. 使用方式

2.1 获取SharedPreferences对象

Android中可通过以下三种方式获取SharedPreferences对象:

2.2.1 Context类中的getSharedPreferences()

接收两个参数,第一个参数指定存储数据的文件,若指定文件不存在,则新建该文件,存放目录为"/data/data/package_name/shared_prefs/",其中package_name为包名。

第二个参数则为操作模式,主要有两种:

MODE_PRIVATE:私有模式,默认情况下的模式,与直接传入0作为参数效果一样,表示只有当前程序可对这个文件进行操作。

MODE_MULTI_PROCESS:多进程模式,允许多个进程对该文件进行操作。

2.2.2 Activity类中的getPreferences()

这个方法与上一个方法比较相似,不同之处在于它只接收一个参数,用于指定操作模式,而无需指定文件名,这个方法默认将当前Activity的类名作为存储数据的文件名。

2.2.3 PreferenceManager类中的getDefaultSharedPreferences()

这是一个静态方法,接收一个Context参数,使用当前应用程序的包名作为存储数据的文件名。

2.2 获取SharedPreferences.Editor对象

SharedPreferences对象本身是只可以读取而不能保存数据的,需要保存数据则要调用SharedPreferences对象的edit()方法获取一个Editor对象。

2.3 通过putXxx方法存储数据

得到Editor对象后,则可调用它的putXxx方法添加数据,这里的Xxx指的是添加的数据类型,例如存储字符串数据则调用putString()方法。这个方法接收两个参数,第一个参数为key值,第二个参数为数据的值,即一个键值对。

2.4 提交变化

添加或移除(remove方法)数据后,需要调用Editor对象的commit()方法将所作变化提交。

2.5 获取存储的数据

获取已经存储的数据较为简单,直接调用SharedPreferences对象的getXxx方法即可,使用方法与Editor对象的putXxx类似。这个方法也是接收两个参数,第一个参数指定要获取的数据的key值,第二个参数指定当获取的数据不存在时所返回的默认值。

3. 范例-实现保存用户名的功能

布局:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center_horizontal"

android:orientation="vertical"

tools:context="com.studying.myapplication.MainActivity">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:gravity="center"

android:text="用户名" />

android:id="@+id/username"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="4" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:gravity="center"

android:text="密码" />

android:id="@+id/passward"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="4"

android:inputType="textPassword" />

android:id="@+id/remember"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:checked="false"

android:text="记住用户名" />

android:id="@+id/login"

android:layout_width="200dp"

android:layout_height="35dp"

android:text="登录"

android:textSize="12sp" />

活动类:

public class MainActivity extends Activity implements View.OnClickListener {

private SharedPreferences mPref;

private SharedPreferences.Editor mEditor;

private EditText mUserName;

private EditText mPassword;

private CheckBox mIsRemember;

private Button mLogin;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

init();

}

private void init() {

mUserName = (EditText) findViewById(R.id.username);

mPassword = (EditText) findViewById(R.id.passward);

mIsRemember = (CheckBox) findViewById(R.id.remember);

mLogin = (Button) findViewById(R.id.login);

mLogin.setOnClickListener(this);

mPref = getSharedPreferences("user_data", MODE_PRIVATE);

mEditor = mPref.edit();

//若之前曾设置过记住用户名,则读取并设置用户名

if (mPref.getBoolean("is_remember", false)) {

mUserName.setText(mPref.getString("user_name", ""));

}

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.login:

String userName = mUserName.getText().toString().trim();

String password = mPassword.getText().toString().trim();

//测试用账号

if ("admin".equals(userName) && "123456".equals(password)) {

Toast.makeText(this, "登录成功!", Toast.LENGTH_SHORT).show();

//若勾选了记住用户名,则保存数据

if (mIsRemember.isChecked()) {

mEditor.putString("user_name", userName);

mEditor.putBoolean("is_remember", true);

mEditor.commit();

}

} else {

Toast.makeText(this, "用户名或密码错误!", Toast.LENGTH_SHORT).show();

}

break;

}

}

}

本文作学习交流用,如有错误,欢迎指正!希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android sharedpreferences 存储对象,android中SharedPreferences实现存储用户名功能相关推荐

  1. android 序列化存储对象,android中对象序列化存储

    项目中要存储一些数据为了提高不必要的网络请求,提高效率,用到数据持久化的知识点,针对这个问题,解决办法其实有很多,以前在项目中是服务获取到webservice的xml,然后直接将xml保存在本地,之后 ...

  2. android 手动回收对象,Android Studio Studio回收列表中的JSON对象

    我想在recyclerview中显示一些JSON对象,并且希望它们在日期之后排序,我该如何实现?下面是下载从JSON URL的数据的方法:Android Studio Studio回收列表中的JSON ...

  3. android 获取对话框对象,Android 基本Dialog和自定义Dialog

    Android 基本Dialog和自定义Dialog Dialog类是对话框的基类,但你应该避免直接实例化Dialog ,可以使用子类 1.AlertDialog 此对话框可以显示标题,最多三个按钮, ...

  4. android 高德坐标对象,android: 高德地图

    分为地图,定位,搜索(我还没做导航功能) 建议采用gradle方式集成 添加依赖 在project/build.gradle文件下添加jcenter的仓库地址 allprojects { reposi ...

  5. c语言中负数的读取和存储,C语言中负数的存储方式

    详细介绍负数的文章: https://blog.csdn.net/daiyutage/article/details/8575248 1.以char类型举例,其取值范围是 -128 ~ 127,即-2 ...

  6. java存储数据_Java中六种数据存储方式

    存储数据 1.寄存器(register).这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配.你不能直接控制,也不能在程序中 ...

  7. android 保存 parcelable对象,Android 使用序列化Serializable和Parcelable

    Android 序列化Serializable和Parcelable使用和区别 一:Serializable 1.什么是序列化 将一个类对象转换成可存储,可传输状态的过程. 2.什么是Serializ ...

  8. android handler 传递对象,Android之Handler消息传递机制详解

    前言 在Android开发中,多线程应用是非常频繁的,其中Handler机制随处可见. 下面就本人对Handle的一些理解与大家一起分享,共同回顾下Handle异步消息传递机制. 1.Handler是 ...

  9. android requestparams传入对象,Android xutils3上传文件使用示例

    Android xutils3工具上传文件非常方便,只需要传入File文件数据或一些其它参数给RequestParams对象即可完成,现在我们来开始使用xutils工具上传文件吧! 步骤一:需要在项目 ...

最新文章

  1. Linux系统备份策略探讨
  2. XP登录时提示“无法加载配置文件,找不到指定文件”
  3. [Web开发] 微软的 PHP+IIS+WinServer 开发培训资料/示例代码
  4. 去掉字符串左右的空格
  5. MySQL之父与企鹅的故事
  6. Android笔记:Activity
  7. 又是同样的剧情!华为Mate Xs被黄牛炒至4万元上下
  8. java生日正则表达式_Java语言十五讲
  9. linux金山打字通游戏版,金山打字游戏2010电脑版-金山打字游戏(最全大集合安装)下载V8.1.0.1官方版-西西软件下载...
  10. python做矩阵初等行变换,matlab做初等行变换,python 矩阵初等行变换,解线性方程,numpy矩阵运算,sympy矩阵运算,求过渡矩阵,求具体某一基组下的坐标,解析几何
  11. html2canvas实现网页局部存为图片和打印
  12. 实现聊天发送语音消息功能
  13. 小知识------SATA
  14. OpenCV-Python无法直接读取gif格式的图片,可用PIL读取
  15. 无FTTR不千兆,华为星光F30让家中不再有“隐秘的角落”
  16. 【human nature】:马云的故事
  17. eclipse注释字体大小显示不一样大
  18. CSS基本知识点总结
  19. python 模拟微信浏览器请求_2020-03-06 python selenium 模拟访问网页检查更新并微信通知...
  20. 大学生访谈计算机教师,职业生涯人物访谈报告,教师(共10篇)

热门文章

  1. r2dbc mysql_使用R2DBC实现数据库的响应式访问
  2. ui设计教程分享:关于Logo设计要素
  3. java gul_[java实战篇]--java的GUI(1)
  4. 「react进阶」一文吃透React高阶组件(HOC)
  5. 73. 使用自定义 Query 实现 SAP UI5 页面路由的书签功能
  6. ListBox优化初步(二)
  7. ygomobile卡组下载网站_游戏王YGOMobile
  8. 安全多方计算——Yao‘s 混淆电路
  9. 转:solr 从数据库导入数据,全量索引和增量索引(实例配置原理)
  10. 做一个小程序大概需要多少钱?一般小程序要多少钱?