1.SharedPreferences是Android平台上一个轻量级的存储类,简单的说就是可以存储一些我们需要的变量信息。2个activity 之间的数据传递除了可以他通过intent来传递数据,还可以使用SharedPreferences来共享数据的方式。SharedPreferences生成的是xml文件。

    SharedPreferences 用法很简单,如果你想要编辑SharedPreferences中的内容就需要用到Editor对象。

2.下面使用一个案例来进一步理解SharedPreferences和Editor

(1)下面以一个登陆界面的设计为例,分析其和SharedPreferences有关代码,设计简单的界面如下图所示。

(2)下面这个方法可以实现保存用户名和密码,数据存放很像Map集合,以键值对的方式存放。关键代码:

  SharedPreferences sp = this.getSharedPreferences("config", MODE_PRIVATE)其中"config"文件名(可以自己命名),MODE_PRIVATE为文件的权限(这里是私有文件);

  Editor editor = sp.edit()获得编辑这个文件的编辑器;  

  editor.putString("username", str_username);利用编辑器编辑内容;

  editor.commit()调用这个方法提交保存数据。

附加备注:

Context.MODE_PRIVATE为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND

Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。

MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;

MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。

(3)下面这个方法可以实现读取出存放的数据,通过键得到值,并且知道填充到对应的编辑框。关键代码只有两句:

SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE)其中"config"文件名,MODE_PRIVATE为文件的权限;

String str_username = sp.getString("username", "")和String str_password = sp.getString("password", "")都是取出对应的数据。

(4)分析:创建对象时有到getSharedPreferences(name, mode)方法,参数name其实是文件名,mode其实是文件权限。这个文件是自动生成的一个xml文件:

(5)可以打开这个xml文件文件,或者有adb shell cat查看这个文件内容,可见用这种方法特殊字符也是可以存放的。

 3. SharedPreferences使用步骤:
>用来保存用户的配置信息和简单的数据步骤:
        1. 声明 SharedPreferences sp; 
        2. 初始化 sp = this.getSharedPreferences("文件名", 0);//0代表的是私有
        3. 获取sp的编辑器 Editor editor = sp.edit();
        4. 存储数据 editer.putString() putBoolean putLong
        5. 最后一步重要,一定要记得commit() 数据才被保存

代码案例:
package com.itheima.setting;
import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.Menu;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Toast;
public class MainActivity extends Activity { //方便的数据保存的api 生成一个xml文件用来保存数据
SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//config 是文件名 0 访问模式私有
sp = this.getSharedPreferences("config", 0);
CheckBox cb = (CheckBox) findViewById(R.id.cb);
//回显数据
boolean status = sp.getBoolean("status", false);//第一个是key 第二个参数是默认值
cb.setChecked(status);
cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Toast.makeText(MainActivity.this, "勾选状态:"+isChecked, 0).show();
//获取编辑器i
Editor editor = sp.edit();
editor.putBoolean("status", isChecked);
editor.commit();//数据库的事务 ,提交数据。把数据保存起来
}
});
}
}

Android(java)学习笔记117:SharedPreferences(轻量级存储类)的更多相关文章

  1. Android为TV端助力 SharedPreferences 轻量级存储!

    首先在当前进程也就是当前的项目里面进行存储 SharedPreferences.Editor editor = mContext.getSharedPreferences("tvplay&q ...

  2. 疯狂java学习笔记之面向对象(一) - 定义类、方法、构造器

    Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. ja ...

  3. java学习笔记(三):类和对象

     创建对象 构造器 每一个类都有一个构造器. 如果我们不单独为一个类编写构造器那么 Java 的编译器将会给这个类建立一个默认的构造器. 每当一个新的对象被创建,至少一个构造器将会被调用. 构造器的一 ...

  4. Java学习笔记(七)——获取类中方法的信息,java的LinkedList

    [前面的话] 在实际项目中学习知识总是最快和最有效的,既能够较好的掌握知识,又能够做出点东西,还是简单的知识总结,最近一直在总结笔记,写的东西还是比较水,希望慢慢可以写出一些干货. 学习过程中的小知识 ...

  5. java学习笔记37(sql工具类:JDBCUtils)

    在之前的内容中,我们发现,当我们执行一条语句时,每新建一个方法,就要重新连接一次数据库,代码重复率很高,那么能不能把这些重复代码封装成一个类呢,我们学习方法时,就学习到方法就是为了提高代码的利用率,所 ...

  6. Java学习笔记48(DBUtils工具类一)

    上一篇的例子可以明显看出,在增删改查的时候,很多的代码都是重复的, 那么,是否可以将增删改查封装成一个类,方便使用者 package demo; /* * 实现JDBC的工具类 * 定义方法,直接返回 ...

  7. Java学习笔记_22_Set接口的实现类

    22.Set接口的实现类: Set接口存放的元素是无序的且不包括反复元素. 1>实现类HashSet: HashSet类依据元素的哈希码进行存放,取出时也能够依据哈希码高速找到.HashSet不 ...

  8. 3.1常用类(java学习笔记)包装类及日期类

    一.包装类 java是一门面向对象的语言,秉承一切皆对象的思想. 可java中有一些基本数据类型并不是对象,有时可能需要将它们变为对象. 这时就需要用到我们的包装类了. 基本数据类型 包装类 int ...

  9. Java学习笔记——I/O流常用类之间的继承关系及构造方法

    朝辞白帝彩云间,千里江陵一日还. 两岸猿声啼不住,轻舟已过万重山. ——早发白帝城 总结一下有哪些I/O流: 输入流方法主要是read()和close(),输出流方法主要是write().flush( ...

  10. Java学习笔记(5)--- Number类和Math 类,String类的应用,Java数组入门

    1.Number 和 Math 类: 在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型(int,double,float这些)的情形. 这种由编译器特别支持的包装称为装箱,所以当内置数 ...

随机推荐

  1. Linear Algebra - Determinant(几何意义)

    二阶行列式的几何意义 二阶行列式 \(D = \begin{vmatrix}a_1&a_2\\b_1&b_2\end{vmatrix} = a_1b_2 - a_2b_1\) 的几何意 ...

  2. jmeter+ant+jenkins实现自动化接口测试

    一.安装前准备 1.JDK:jdk-8u121-windows-x64 2.jmeter工具:apache-jmeter-2.13 3.ANT工具:apache-ant-1.9.7-bin 4.jen ...

  3. AGC001 F - Wide Swap【线段树+堆+拓扑排序】

    给出的模型很难搞,所以转换一下,记p[i]为i这个数的位置,然后相邻两个p值差>k的能交换,发现使原问题字典序最小也需要使这里的字典序最小 注意到p值差<=k的前后顺序一定不変,那么可以n ...

  4. 求10000以内n的阶乘(openjudge 2923)

    求10000以内n的阶乘 总时间限制:  5000ms 内存限制:  655360kB 描述 求10000以内n的阶乘. 输入 只有一行输入,整数n(0<=n<=10000). 输出 一行 ...

  5. IT兄弟连 Java语法教程 变量1

    什么是变量 在Java程序中,变量是基本的存储单元.是在程序运行中值可以改变的一块内存区域.变量是通过标识符(变量名).变量类型及可选的初始化器来定义的,此外,所有的变量都有作用域,作用域定义了变量的 ...

  6. 转 BeanShell 简介与学习(一篇就够)

      2017年05月17日 21:24:10 金刚龙123 阅读数:5131 标签: BeanShell 更多 个人分类: 开发语言及脚本语言   简介: BeanShell是一种脚本语言,一种完全符 ...

  7. Spring Cloud与Duddo比较(非原创)

    文章大纲 一.Spring Cloud与Duddo背景介绍二.Spring Cloud与Duddo比较三.参考文章   一.Spring Cloud与Duddo背景介绍   国内技术人员喜欢拿 Dub ...

  8. pyinstaller打包多个py文件仍报错ModuleNotFoundError: No module named 'xxx'

    [问题现象] 使用pyinstaller A.py -p b.py -p c.py打包多个文件 或者使用main.spec在Analysis配置好各个文件打包 打包成功后,运行main.exe仍然报错 ...

  9. PAT刷题记录

    1. 1007 素数对猜想 :运行超时 算法问题还是语言本身效率低下? import math def is_prime(num): if num == 2: return num temp = in ...

  10. Jquery属性操作(入门二)

    ********JQuery属性相关的操作******** 1.属性 属性(如果你的选择器选出了多个对象,那么默认只会返回出第一个属性). attr(属性名|属性值) - 一个参数是获取属性的值,两个 ...