SharedPreferences去保存登录的密码和状态
来源:互联网 发布:哪些软件可以赚集分宝 编辑:程序博客网 时间:2024/06/06 03:35
SharedPreferences
StringBuffer 代码如下
1.使用sp完善登录案例
package com.itheima.login;
public class MainActivity extends AppCompatActivity {
private EditText et_name;
private EditText et_pwd;
private CheckBox cb_islogin;
private SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1.先找到用户名密码
et_name = (EditText) findViewById(R.id.et_name);
et_pwd = (EditText) findViewById(R.id.et_pwd);
cb_islogin = (CheckBox) findViewById(R.id.cb_login);
//2.把name 和 pwd 取出来
sp = getSharedPreferences("config", 0); //:使用sp 系统会生成一个xml格式的文件
//参数2:默认值 如果根据name找不到对应的值 就是使用默认值
boolean state = sp.getBoolean("isChecked", false);
String name = sp.getString("name", "");
String pwd = sp.getString("pwd", "");
if (state){
//设置checkbox为勾选状态
cb_islogin.setChecked(true);
//3.设置数据 (EditText)
et_name.setText(name);
et_pwd.setText(pwd);
}else{
cb_islogin.setChecked(false);
et_name.setText("");
et_pwd.setText("");
}
}
//1.实现按钮点击事件
public void click(View view) {
//1.获取用户输入的用户名和密码
String pwd = et_pwd.getText().toString().trim();
String name = et_name.getText().toString().trim();
//2.判断用户名密码是否为空 如果什么也不输入 给用户友好提示
if (TextUtils.isEmpty(name) ||TextUtils.isEmpty(pwd) ){ //如果if条件成立 就说明用户名为空
Toast.makeText(this,"用户名或者密码为空",Toast.LENGTH_LONG).show();
}else{
if (cb_islogin.isChecked()){
//说明cb已经勾选
//3.说明用户名密码不为空 使用sp来存数据 获取sp的实例
//3.1 获取sp的编辑器
SharedPreferences.Editor edit = sp.edit();
//3.2 存数据 用户名 和密码
edit.putString("name",name);
edit.putString("pwd",pwd);
//3.3记录checkbox状态
edit.putBoolean("isChecked",true);
//3.4 调用commit方法提交数据
edit.commit();
}else{
//3.5 使用sp在获取一个edit实例
SharedPreferences.Editor edit = sp.edit();
edit.putBoolean("isChecked",false);
edit.commit();
}
}
2.xml序列化
实现思路 通过程序生成一个xml文件来备份手机短信. 先获取手机短信的内容 --->通过xml备份.
String 和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。另外,String实现了equals方法,new String(“abc”).equals(new String(“abc”)的结果为true,而StringBuffer没有实现equals方法,所以,new StringBuffer(“abc”).equals(new StringBuffer(“abc”)的结果为false。
接着要举一个具体的例子来说明,我们要把1到100的所有数字拼起来,组成一个串。
StringBuffer sbf = new StringBuffer();
for(int i=0;i<100;i++)
{
sbf.append(i);
}
上面的代码效率很高,因为只创建了一个StringBuffer对象,而下面的代码效率很低,因为创建了101个对象。
String str = new String();
for(int i=0;i<100;i++)
{
str = str + i;
}
在讲两者区别时,应把循环的次数搞成10000,然后用endTime-beginTime来比较两者执行的时间差异,最后还要讲讲StringBuilder与StringBuffer的区别。
String覆盖了equals方法和hashCode方法,而StringBuffer没有覆盖equals方法和hashCode方法,所以,将StringBuffer对象存储进Java集合类中时会出现问题。
StringBuffer 代码如下
public void click1(View view) {
//1.创建StringBuffer实例
StringBuffer sb = new StringBuffer();
//2.文档声明
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
//3.拼xml的根标签
sb.append("<smss>");
//4.根据短信个数 拼sms标签
for (Sms list : lists) {
sb.append("<sms>");
//5.拼 address标签
sb.append("<address>");
sb.append(list.getAddress());
sb.append("</address>");
//5.拼 body标签
sb.append("<body>");
sb.append(list.getBody());
sb.append("</body>");
//6.拼 date标签
sb.append("<date>");
sb.append(list.getDate());
sb.append("</date>");
sb.append("</sms>");
}
//7.拼sms标签
sb.append("</smss>");
//8 把sb里面拼的数据取出来 生成一个xml文件就可以了 //把xml放到手机内部存储目录 //data/data/当前包名/files
try {
File file = new File(getFilesDir().getPath(),"smsbackup.xml");
//9.创建文件输出流
FileOutputStream fos = new FileOutputStream(file);
//10.把刚刚组拼好的数据写到smsbackup文件中
fos.write(sb.toString().getBytes());
fos.close();
Toast.makeText(this, "sucess", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "fail", Toast.LENGTH_SHORT).show();
}
}
通过官方提供序列化类实现xml序列化(通过程序生成一个xml)
public void click2(View view) {
try {
//1.获取xml 工厂
// XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
//2.通过工厂获取序列化器
// XmlSerializer serializer = factory.newSerializer();
//通过xml工具类来获取xml的序列化器
XmlSerializer serializer = Xml.newSerializer();
//3 创建一个文件对象 指定文件生成目录
File file = new File(getFilesDir().getPath(),"smsbackup3.xml");
//4.创建文件输出流
FileOutputStream fos = new FileOutputStream(file);
//5.告诉序列化器要生成一个xml文件
serializer.setOutput(fos,"utf-8");
//6.安装xml的语法生成xml文件 首先文档声明 参数2:生成的这个xml文件是否是独立
serializer.startDocument("utf-8",true);
//7.生成xml的根标签 参数1:命名空间 不带 参数2:代表标签名
serializer.startTag(null,"smss");
//8.循环生成sms标签
for (Sms list : lists) {
serializer.startTag(null,"sms");
//9.生成body标签
serializer.startTag(null,"body");
serializer.text(list.getBody());
serializer.endTag(null,"body");
//10.生成address标签
serializer.startTag(null,"address");
serializer.text(list.getAddress());
serializer.endTag(null,"address");
//11.生成date标签
serializer.startTag(null,"date");
serializer.text(list.getDate());
serializer.endTag(null,"date");
serializer.endTag(null,"sms");
}
//12.生成xml根标签结束
serializer.endTag(null,"smss");
//13.代表文档结束
serializer.endDocument();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
3.数据库
数据库 database 什么是数据库:用来存储数据的仓库.
软件开发中 存储数据的几种方式. 内存,文件中(.txt xml ....) 网络(百度) 数据库:当有大量相似结构的数据需要存储的时候.比如QQ用户数据 银行的用户数据.icbc
数据库的分类: 网状 层次 关系化 ---->什么是关系化数据---->er模型图 --->研发一个博客系统.
常见的关系化数据库
[1]sqlserver 2000 2006 2008 微软研发
[2]mysql 5.x之前是开源免费 6.x之后被oracle 收购了 开始收费
[3]oracle 甲骨文 收费
[4]db2 ibm研发 收费
[5]sqlite android中内置的数据库
[6]hsql java框架使用的
4.mysql服务器
硬件(服务器就是一台高配置电脑) 软件 :电脑上安装了服务器软件 这台电脑就称之为服务器了.
安装就按照我给大家的笔记装上就行了
卸载:
[1]来到控制面板卸载
[2]来到你自己mysql的安装目录 把没有卸载干净的目录手动清除
[3]要来到电脑的注册表 把注册表信息也删除.
5.mysql的存储结构
6.sql语言
sql 结构化查询语言 show databases;每一句sql语句都可以单独执行 执行后就可以获取一个结果.
java 过程化 int i = 10; int j =20; int result = i + j;
sql语言是通用的 不管操作什么数据库都要使用sql语句
sql分类
学习步骤 1.使用sql操作数据库 2.使用sql操作表 3.使用sql操作数据
7.使用sql对数据库进行操作
首先安装mysql
连接数据库
连接数据库
* 打开cmd窗口,使用命令,连接mysql数据库
* 命令:mysql -uroot -p
查看所有的数据库
* 语句:show databases;
创建数据库
创建数据库
* 语句:create database 数据库的名称;
* 示例:create database hm104;
删除数据库
删除数据库
* 语句:drop database 要删除的数据库的名称;
* 示例:drop database hm103;
数据库切换
* 如果想要创建一个数据库表,这个表要在一个数据库里面,所以需要切换到数据库
* 语句:use 要切换的数据库的名称;
* 示例:use hm104;
查看当前使用的数据库
查看当前使用的数据库
* 语句:select database();
8.使用sql语言操作数据库里面的表
创建表
语句: create table 表名称 (
示例:创建表 user,字段 id username password sex create table info(id int,name varchar(20),age int);
create table info2(id
展示数据库中一共有多少个表
show tables;
mysql中数据类型
1.字符串型
VARCHAR、CHAR
当创建表时候,使用字符串类型,name varchar(40),指定数据的长度
varchar和char的区别:
varchar的长度是可变的 变长 20 zhangsan
char的长度是固定的 定长 20 zhangsan+12个空格
2.大数据类型
BLOB(存音频,视频,图片等)、TEXT(存字符类型,文本文件)
* 使用这个类型可以存储文件,一般开发,不会直接把文件存到数据库里面,存视频的路径.
3.数值型
mysql中TINYINT SMALLINTINT BIGINT FLOATDOUBLE
Java中byte short int long floatdouble
4.逻辑性
BIT 占1位,1字节占8位
* 类似java里面的boolean
5.日期型
DATE:用于表示日期 1945-08-15
TIME:用于表示时间 19:10:40
查询表的结构
desc + 表名称 desc info;
mysql的约束
第一种,非空约束 not null
* 表示数据不能为空
第二种,唯一性约束 unique
* 表中的记录不能重复的
第三种,主键约束 primary key
* 表示非空,唯一性
* 自动增长 auto_increment
一旦字段设置为主键,那么该字段就是非空并且唯一
删除表
drop + table + 表名称 drop table info;
9 使用sql操作表里面的记录
往表里面添加记录
语句:insert into 要添加的表名称 values(要添加的值);
示例: insert into info values(2,'zhangsan',17);
查询表里面的数据
语句:select 要查询的字段的名称 (*) from 表名称 where 条件
示例:select id,name,age from info; select * from info;
修改表里面的记录
语句:update 表名称 set 要修改的字段的名称1=修改的值2,要修改的字段的名称2=修改的值2 where 条件
示例:update info set age = 27 where id =1;
删除表里面的记录
4.4.3.删除记录 delete
语句:delete from 表名称 where 条件
示例:delete from info where id=2; 删除记录 如果不加where条件代表删除所有的
去除重复的记录
4.4.5.去除重复记录 distinct
语句 select distinct * from 表名; select distinct * from info;
where语句的使用
创建一张学生表
create table student(
查询表里面英语成绩大于 80
select * from student where english > 80;
查询表里面英语成绩是80100的学生信息
select * from student where english in(80,100); in里面有谁就查询谁
查询表里面英语成绩是70,并且数学成绩是80的学生信息
select * from student where english = 70 and math=80;
查询英语成绩是70~100之间的值
select * from student where english >= 70 and english <=100;
模糊查询 like
select * from student where name like '%a%';
order by使用
根据英语成绩 升序
select * from student order by english asc; 默认升序
根据英语成绩 降序 desc
select * from student order by english desc;
10.sql中的函数 (聚合函数)
统计记录数 count
select count(*) from student;
算出英语成绩总和 sum
select sum(math) from student;
算出英语成绩平均分 avg 总分/数量
select sum(english)/count(*) from student;
select avg(english) from student;
算出最大值 max
select max(english) from student;
算出最小值 min
select min(english) from student;
11.分组操作 group by
1.创建订单表
create table orders (
练习一:统计orders表里面每类商品的总的价格
select name,sum(price) from orders group by name;
练习二 对商品进行分类,得到每类商品的总价格大于66的商品 where关键字后面不可以加聚合函数
select name,sum(price) from orders group by name having sum(price)>66;
12.limit
limit 0 2. 0代表从第几条开始查 2:代表查询的个数.
13.今天总结
1.sp的使用 ☆☆☆
2.xml序列化
2.1 StringBuffer ☆☆☆
2.2 XmlSerializer ☆☆☆
3.数据库 今天最重要的sql语句 ☆☆☆
阅读全文
0 0
- SharedPreferences去保存登录的密码和状态
- Android使用SharedPreferences实现登录帐号和密码的保存方法简介
- 保存用户名和密码(SharedPreferences)
- SharedPreferences 保存用户名和密码
- android SharedPreferences实现用户的注册和保存账号密码
- 使用SharedPreferences保存登陆账号和密码
- 使用SharedPreferences保存用户名和密码
- 原创思考 NSUserDefaults实现自动登录--保存账号和密码--记住登录状态
- 用户登录记住密码----SharedPreferences的使用
- Android——SharedPreferences实现登录界面的记住密码和自动登录功能
- Android——SharedPreferences实现登录界面的记住密码和自动登录功能
- 保存登录名和登录密码cookie
- Android用SharedPreferences保存数据实现注册和登录功能(首次安装默认打开注册,记住密码)
- 登录和记住密码关于SharedPreferences存储密码
- 保存登录plsql developer 的用户名和密码
- 保存登录plsql developer 的用户名和密码
- 保存登录plsql developer 的用户名和密码
- plsql developer中 保存/删除 登录的用户名和密码
- iOS性能优化之内存管理:Analyze、Leaks、Allocations的使用和案例代码
- JS中预解释(变量提升)
- 学习笔记第一天
- 设计模式---- 单例模式 工厂模式 构造函数模式 原型模式 混合模式
- node中异步变同步
- SharedPreferences去保存登录的密码和状态
- mongoDB的安装与使用
- nodejs中路径问题
- Python BeautifulSoup模块
- node.js的POST
- js数组去重
- 使用git上传项目至github
- oracle索引的事
- node.js 将json字符串转为json对象的方法