过了这么久了,看看自己的园龄都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文件,然后用键得到值
再创建复选框监听,存入键值对
这一天天的,今天体育考核,终于明白了一个道理“一鼓作气,再而衰,三而竭”
做俯卧撑,第一次做的好像不太好看,但是做的个数挺足;就第二次,第二次感觉手酸了,没做到合格;休息了会,第三次,颤抖的做完,勉勉强强吧。
巅峰时刻可能还是首秀,所以不要拿自己人生的首秀开玩笑,有可能那就是巅峰。