Android SP的具体内容
过了这么久了,看看自己的园龄都17天了,一直在总结,从未缺席,我还是很开心的,踏踏实实的完成自己能学到的。
今天学习SP
SP:全称SharedPreferences,别问我为啥知道,因为打了好多遍了,哈哈,这个东西你可以认为它可以给你的项目存储一些轻量级的数据放到一个文件。
就拿我们今天的例子来说,我们用SP实现输入用户和昵称,通过复选框CheckBox监听,判断是否记住密码,而记住密码的这个操作,就是把用户,密码,以及是否选择了这个复选框的情况用一个文件存进去。
我当时的理解就是创建一个类似数据库的小文件,要取的话就用键值对去取出来。

alpha的作用就是给图片设置透明度,其他的都是简单的布局控件。
现在布局的基本套路确定了,就是使用线性布局和帧布局以及权重的套用,就基本能写出自己想要的布局了。
权重就是weight那个
和布局搭配使用,就拿线性布局来说,线性布局有水平和垂直,如果是水平方向添加权重,那么它的高就要设置为0dp
这是因为我们设置水平方向权重的话是改变高,那么就不用设置高了。
然后就是Gravity了,如果是Layout_gravity就是针对它本身在父布局中的位置
gravity就是对于它内部子布局的位置
布局代码是上面这边;
下面的是主活动的代码

学到了一个根据布局生成代码的好东西;
LayoutCreator
这里面的这三个方法都是自动生成的,这样写起来是不是很棒,有点偷懒了。
https://www.jianshu.com/p/46d0f191178f
效果就是

这个界面是刚启动的界面,为啥会有账户和密码,这就是SP它的作用了,
只要监听你勾选了记住密码,即使你结束了程序,下次启动还是会加载你记住的密码。
我觉得还比较简单。
然后这边解释下核心代码吧:
username = findViewById(R.id.username); 输入账户的
password= findViewById(R.id.password); 输入密码的
CheckBox checkBox=findViewById(R.id.remember); 复选框
Button log_in=findViewById(R.id.login); 登录按钮
Button register=findViewById(R.id.register); 注册按钮
log_in.setOnClickListener(this); 设置监听,为啥监听里面是this,因为监听有两种方法,一种是遍历实现,一种是让类实现,
这就是让类实现,就是让类implements视图监听,然后实现它的OnClick方法
final SharedPreferences sp=this.getSharedPreferences("log5.25",MODE_PRIVATE);
这边就是创建SP,如果说有这个文件就调用,没得就自己创建,第一个参数是文件名,第二个参数是模式,默认是隐私,其他很多被弃用了,就只用这个吧
String StringUser=sp.getString("usernameString","");这就相当于键值对,用get第一个参数为键,后面的第二个就是没找到这个键,默认返回的字符串
String StringPassword=sp.getString("passwordString","");
Boolean isChecked=sp.getBoolean("isChecked",false); 这个也是一样,只不过它是Boolean的数据,所以默认返回值是false
username.setText(StringUser); 既然取出来了,就给它写到账户,密码,
password.setText(StringPassword);
checkBox.setChecked(isChecked); 这边也是写入复选框
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
接着就是给复选框设置监听,
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.d("this", isChecked + "");
SharedPreferences.Editor editor = sp.edit(); 这个就是调用SP的编辑器
String usernameString = username.getText().toString().trim(); 然后把我们在账户和密码输入的东西存下来
String passwordString = password.getText().toString().trim();trim在java中是去两端多余空格的
if(isChecked)如果它勾选了那个复选框
{
editor.putString("usernameString",usernameString);就把数据写到那个文件
editor.putString("passwordString", passwordString);
editor.putBoolean("isChecked", isChecked);
editor.commit();最后提交,提交有两种常用方式apply和commit,一个异步一个同步
异步就是编辑的时候一句话一句话写
同步就是等到执行到commit语句,把记录要写的东西一口气写进去(同步不适合大量数据存储,不然存入时会卡顿,影响用户体验)
}
else{
editor.clear().commit(); 这边就是,如果你都没勾选记住密码,那么就清除文件里的数据,不然下次开启还是会记住密码。
}
}
}); 提醒的是活动里自动生成时写的submit方法,它的作用很简单吧,就是看你输入东西没,然后输入的是不是合格的,
不然就不给你跳其他活动去。
因为本牛崽这边还写了个活动Main2Activity,用来展示登录成功的。 今天的内容就到这,总体来说还是比较简单的。
创建视图,获取SP,创建SP文件,然后用键得到值
再创建复选框监听,存入键值对 这一天天的,今天体育考核,终于明白了一个道理“一鼓作气,再而衰,三而竭”
做俯卧撑,第一次做的好像不太好看,但是做的个数挺足;就第二次,第二次感觉手酸了,没做到合格;休息了会,第三次,颤抖的做完,勉勉强强吧。
巅峰时刻可能还是首秀,所以不要拿自己人生的首秀开玩笑,有可能那就是巅峰。
Android SP的具体内容的更多相关文章
- Android组件系列----ContentProvider内容提供者
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- android学习十二(android的Content Provider(内容提供器)的使用)
文件存储和SharePreference存储以及数据存储一般为了安全,最好用于当前应用程序中訪问和存储数据.内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能 ...
- Android 应用程序之间内容分享详解(一)
一个Andoird应用程序的重要的地方是他们有相互沟通和整合的能力,一个应用程序可以和另一个应用程序交互,接下来我们来看看Android应用之间的内容分享 当你构建Intent的时候,必须要指定Int ...
- Android 应用程序之间内容分享详解(二)
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9428613 Android 应用程序之间内容分享详解(一) 之前给大家分享了你开发的应 ...
- Android - HelloWorld的Layout内容
Android - HelloWorld的Layout内容 本文地址: http://blog.csdn.net/caroline_wendy 作为最基础的Android程序, HelloWorld的 ...
- Android开发学习—— ContentProvider内容提供者
* 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的数据库.把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用. Uri:包含一个具有一定格式的字符串的对 ...
- Android入门(十四)内容提供器-实现跨程序共享实例
原文链接:http://www.orlion.ga/661/ 打开SQLite博文中创建的 DatabaseDemo项目,首先将 MyDatabaseHelper中使用 Toast弹出创建数据库成功的 ...
- android: 创建自己的内容提供器
我们学习了如何在自己的程序中访问其他应用程序的数据.总体来说思 路还是非常简单的,只需要获取到该应用程序的内容 URI,然后借助 ContentResolver 进行CRUD 操作就可以了.可是你有没 ...
- [Android Pro] 监听内容提供者ContentProvider的数据变化
转载自:http://blog.csdn.net/woshixuye/article/details/8281385 一.提出需求 有A,B,C三个应用,B中的数据需要被共享,所以B中定义了内容提供者 ...
随机推荐
- Redis RDB 分析工具 rdbtools 说明
背景 Redis是基于内存的KV数据库,内存作为存储介质,关注其内存的使用情况是一个重要指标,解析其内部的存储信息是给出优化方法和维护的最基本要求.解析内存有二种方法:第一个是通过scan遍历所有ke ...
- Maven 专题(二):vscode 创建一个java Maven项目(vscode)以HdfsClientDemo 为例
1.打开vs code软件,最好创建好自己的工程并使用vs code打开 2. 使用快捷键ctrl + shift + p按键,输入maven进行搜索,选中如图诉讼hi的create mavene ...
- linux中无法使用vim命令
报:linux中 vim 不是内部指令! 解决: 1. rpm -qa | grep vim // 查看vim命令在什么软件包 出现 vim-minimal-7.4.160-4.el7.x86_64 ...
- Guava集合--新集合类型
Guava引入了很多JDK没有的.但我们发现明显有用的新集合类型.这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其他概念.作为一般规则,Guava集合非常精准地遵循了JDK接口契约 ...
- CondenseNet:可学习分组卷积,原作对DenseNet的轻量化改造 | CVPR 2018
CondenseNet特点在于可学习分组卷积的提出,结合训练过程进行剪枝,不仅能准确地剪枝,还能继续训练,使网络权重更平滑,是个很不错的工作 来源:晓飞的算法工程笔记 公众号 论文:Neural ...
- 设计模式:composite模式
目的:使容器和内容具备一致性 实现:将对象组合成树形结构以表示“部分-整体”的层次结构 实例:文件夹中可以包含文件夹也可以包含文件 例子: class Item //接口定义 { public: vi ...
- 发布一个自己做的图片转Base64的软件,Markdown写文章时能用到
markdownpic 介绍 Markdown编辑时图片生成base64 软件架构 使用了.netcore winform框架 安装教程 直接运行即可 使用说明 拖拽图片文件 双击选择文件 复制粘贴图 ...
- Oracle对表进行备份
前言: 在实际开发中,我们常常需要对单张或多张表进行备份,以下博主就从这两个方面进行总结.如需转载,请标明来处,谢谢! 在备份前我们先创建表盒相关测试的数据 -- Create table creat ...
- Linux平台下SSD的TRIM指令的最佳使用方式(不区别对待NVMe)
SSD写数据会出现什么问题 SSD读写的单位不是位,而是一个块.如果要改变这个块中的一位,首先要将整个块擦写成1,然后再写入更新的数据. 为了解决擦写块的低效,SSD的策略是将需要改写的块,读取出来, ...
- 前端学习(十二):CSS排版
进击のpython ***** 前端学习--CSS排版 本节主要介绍网页排版中主要格式化元素属性 帮助开发者把css技术与网页排版紧密联系到一起,来更好的实现网页设计效果 字体属性 字体 在日常工作中 ...