过了这么久了,看看自己的园龄都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的具体内容的更多相关文章

  1. Android组件系列----ContentProvider内容提供者

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  2. android学习十二(android的Content Provider(内容提供器)的使用)

    文件存储和SharePreference存储以及数据存储一般为了安全,最好用于当前应用程序中訪问和存储数据.内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能 ...

  3. Android 应用程序之间内容分享详解(一)

    一个Andoird应用程序的重要的地方是他们有相互沟通和整合的能力,一个应用程序可以和另一个应用程序交互,接下来我们来看看Android应用之间的内容分享 当你构建Intent的时候,必须要指定Int ...

  4. Android 应用程序之间内容分享详解(二)

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9428613 Android 应用程序之间内容分享详解(一) 之前给大家分享了你开发的应 ...

  5. Android - HelloWorld的Layout内容

    Android - HelloWorld的Layout内容 本文地址: http://blog.csdn.net/caroline_wendy 作为最基础的Android程序, HelloWorld的 ...

  6. Android开发学习—— ContentProvider内容提供者

    * 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的数据库.把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用. Uri:包含一个具有一定格式的字符串的对 ...

  7. Android入门(十四)内容提供器-实现跨程序共享实例

    原文链接:http://www.orlion.ga/661/ 打开SQLite博文中创建的 DatabaseDemo项目,首先将 MyDatabaseHelper中使用 Toast弹出创建数据库成功的 ...

  8. android: 创建自己的内容提供器

    我们学习了如何在自己的程序中访问其他应用程序的数据.总体来说思 路还是非常简单的,只需要获取到该应用程序的内容 URI,然后借助 ContentResolver 进行CRUD 操作就可以了.可是你有没 ...

  9. [Android Pro] 监听内容提供者ContentProvider的数据变化

    转载自:http://blog.csdn.net/woshixuye/article/details/8281385 一.提出需求 有A,B,C三个应用,B中的数据需要被共享,所以B中定义了内容提供者 ...

随机推荐

  1. java 基本语法(二) 变量的使用(重点)

    1.变量的分类1.1 按数据类型分类 详细说明://1. 整型:byte(1字节=8bit) \ short(2字节) \ int(4字节) \ long(8字节) //① byte范围:-128 ~ ...

  2. Django之模型的_meta属性

    Python有反射机制,Django也不例外,也有很好的反射机制,每个Django模型都有一个属性_meta,_meta也有属性和方法,这些属性和方法反射出了模型的一些特性,如果_meta用的好的话, ...

  3. C#-CLR note - 26线程

    开篇 async/wait的使用 static async Task Main(string[] args) { Console.WriteLine("start-- "); va ...

  4. (2)简单理解和使用webpack-dev-server

    webpack-dev-server能做什么? 每次打包都得像之前一样使用webapck 入口文件 -o 出口文件,每次修改都得打包一次过于麻烦,可以使用webpack-dev-server实现自动打 ...

  5. corosync+pacemaker高可用集群

    高可用集群,是指以减少服务中断(如因服务器宕机等引起的服务中断)时间为目的的服务器集群技术.简单的说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源.这些单个的计算机系统就是集群的节点. ...

  6. Flarum 的安装与配置

    Flarum 是一款非常棒的开源论坛程序,本鸽子的论坛 就是用 Flarum 搭建的.之前有人问过我 Flarum 如何搭建,所以下面讲一下 Flarum 的搭建过程. 前提 域名需要提前解析. 有一 ...

  7. HashMap 中 get,put 方法源码实现

    HashMap 是Map接口的一个实现类 1.线程 HashMap 非线程安全2.数据存储结构 hashMap采用Entity数组来存储 key-value对,每一个键值对组成一个Entity,键值对 ...

  8. python爬虫入门(2)----- lxml

    lxml 简介 lxml使用xpath对xml进行解析,XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. 参考官方文档:https://l ...

  9. @Autowired @Qualifier

    spring2.1中允许用户通过@Autowired注解对Bean的属性变量.属性Setter方法以及构造函数进行标注,配合AutowiredAnnotationBeanProcessor完成Bean ...

  10. xctf-web supersqli

    单引号注入,用order by查到了两个column.用union select的时候发现select关键字被过滤了 用分号尝试堆叠注入显示出了两张表 分别查询字段 flag在表19198109311 ...