27. 设置模块(四)之设置密保
上一节对“我”模块(二)进行了综述(可参见 “我”模块(二) 进行了解),接下来将从设置模块开始详细介绍:
- “我”模块(一)之收藏
- “我”模块(二)之设置
- “我”模块(三)之修改密码
- “我”模块(四)之设置密保
知识点
- 掌握“收藏”界面的开发,能够实现新闻收藏功能。
- 掌握“设置”界面的开发,能够设置用户的基本信息。
- 掌握“修改密码”界面的开发,能够实现密码的修改功能。
- 掌握“设置密保”界面的开发, 能够实现密保的设置功能。
10. “设置密保”界面
任务分析:
“设置密保”界面主要用于输入要设为密保的姓名,“找回密码”界面可以根据用户当前输入的用户名和设为密保的姓名找回密码,界面效果如图所示。
任务实施:
(1)创建“设置密保”和“找回密码”界面:FindPswActivity & activity_find_psw。
(2)放置界面控件。
2个EditText控件,用于输入用户和姓名;
3个TextView控件,一个用于显示密码(暂时隐藏),其余两个分别用于显示“您的用户名是?”和“您的姓名是?”文字;
1个Button控件作为“验证”按钮。
activity_find_psw.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/register_bg_color"android:orientation="vertical"><include layout="@layout/main_title_bar" /><TextViewandroid:id="@+id/tv_user_name"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="25dp"android:layout_marginRight="25dp"android:layout_marginTop="35dp"android:text="您的用户名是?"android:textColor="@color/constellation_info_color"android:textSize="14sp"android:visibility="gone" /><EditTextandroid:id="@+id/et_user_name"android:layout_width="fill_parent"android:layout_height="40dp"android:layout_marginLeft="25dp"android:layout_marginRight="25dp"android:layout_marginTop="10dp"android:background="@drawable/find_psw_radius_bg"android:hint="请输入您的用户名"android:paddingLeft="8dp"android:singleLine="true"android:textColor="#000000"android:textColorHint="#a3a3a3"android:textCursorDrawable="@null"android:textSize="14sp"android:visibility="gone" /><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="25dp"android:layout_marginRight="25dp"android:layout_marginTop="15dp"android:text="您的姓名是?"android:textColor="@color/constellation_info_color"android:textSize="14sp" /><EditTextandroid:id="@+id/et_validate_name"android:layout_width="fill_parent"android:layout_height="40dp"android:layout_marginLeft="25dp"android:layout_marginRight="25dp"android:layout_marginTop="10dp"android:background="@drawable/find_psw_radius_bg"android:hint="请输入要验证的姓名"android:paddingLeft="8dp"android:singleLine="true"android:textColor="#000000"android:textColorHint="#a3a3a3"android:textCursorDrawable="@null"android:textSize="14sp" /><TextViewandroid:id="@+id/tv_reset_psw"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="25dp"android:layout_marginRight="25dp"android:layout_marginTop="10dp"android:gravity="center_vertical"android:textColor="@android:color/holo_red_light"android:textSize="14sp"android:visibility="gone" /><Buttonandroid:id="@+id/btn_validate"android:layout_width="fill_parent"android:layout_height="35dp"android:layout_gravity="center_horizontal"android:layout_marginLeft="25dp"android:layout_marginRight="25dp"android:layout_marginTop="15dp"android:background="@drawable/register_btn_selector"android:text="验证"android:textColor="@android:color/white"android:textSize="16sp" />
</LinearLayout>
(3)创建EditText控件的背景。由于“设置密保”界面的输入框的四个角都是椭圆形,因此在res/drawable中创建一个find_psw_radius_bg.xml文件进行设置。
find_psw_radius_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><corners android:radius="5dp" /><solid android:color="#FFFFFF" /><strokeandroid:width="1dp"android:color="@color/register_btn_color" />
</shape>
11. “设置密保”界面逻辑代码
任务分析:
根据任务综述可知,“设置密保”界面和“找回密码”界面使用同一个Activty,该Activity主要是根据从“设置”界面和“登录”界面传递过来的from参数的值判断要跳转到那个界面,若值为security,则处理的是“设置密保”界面,否则处理的就是“找回密码”界面。“设置密保”界面的逻辑主要是将用户输入的姓名保存到SharedPreferences中,“找回密码”界面逻辑主要是将SharedPreferences中用户名对应的原始密码修改为123456。
任务实施:
(1)获取界面控件。在FindPswActivity中创建界面控件的初始化方法init(),用于获取“修改密码”界面所要用到的控件以及设置后退键,“保存”按钮的点击事件。
(2)保存密保。由于“设置密保”界面需要将用户输入的姓名保存到SharedPreferences中,因此需要创建saveSecurity()方法进行保存。
(3)保存初始化密码到SharedPreferences中。在“找回密码”界面创建isExistuserName()方法判断用户输入的用户名是否存在,若存在,则创建readSecurity()方法获取此用户之前设置过的密保,若用户输入的密保和从SharedPreferences中获取的密保一致,则创建savePsw()方法将此用户原来的密码保存为123456(由于原来的密码不能获取明文,因此将此账户的密码重置为初始密码123456)。
FindPswActivity.java
public class FindPswActivity extends AppCompatActivity {private EditText et_validate_name, et_user_name;private Button btn_validate;private TextView tv_main_title;private TextView tv_back;//from为security时是从设置密保界面跳转过来的,否则就是从登录界面跳转过来的private String from;private TextView tv_reset_psw, tv_user_name;private SwipeBackLayout layout;private RelativeLayout rl_title_bar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);layout = (SwipeBackLayout) LayoutInflater.from(this).inflate(R.layout.base, null);layout.attachToActivity(this);setContentView(R.layout.activity_find_psw);//获取从登录界面和设置界面传递过来的数据from = getIntent().getStringExtra("from");init();}/*** 获取界面控件及处理相应控件的点击事件*/private void init() {tv_main_title = (TextView) findViewById(R.id.tv_main_title);tv_back = (TextView) findViewById(R.id.tv_back);tv_back.setVisibility(View.VISIBLE);rl_title_bar = (RelativeLayout) findViewById(R.id.title_bar);rl_title_bar.setBackgroundColor(getResources().getColor(R.color.rdTextColorPress));et_validate_name = (EditText) findViewById(R.id.et_validate_name);btn_validate = (Button) findViewById(R.id.btn_validate);tv_reset_psw = (TextView) findViewById(R.id.tv_reset_psw);et_user_name = (EditText) findViewById(R.id.et_user_name);tv_user_name = (TextView) findViewById(R.id.tv_user_name);if ("security".equals(from)) {tv_main_title.setText("设置密保");} else {tv_main_title.setText("找回密码");tv_user_name.setVisibility(View.VISIBLE);et_user_name.setVisibility(View.VISIBLE);}tv_back.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {FindPswActivity.this.finish();}});btn_validate.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String validateName = et_validate_name.getText().toString().trim();if ("security".equals(from)) { //设置密保if (TextUtils.isEmpty(validateName)) {Toast.makeText(FindPswActivity.this, "请输入要验证的姓名",Toast.LENGTH_SHORT).show();return;} else {Toast.makeText(FindPswActivity.this, "密保设置成功",Toast.LENGTH_SHORT).show();//保存密保到SharedPreferences中saveSecurity(validateName);FindPswActivity.this.finish();}} else {//找回密码String userName = et_user_name.getText().toString().trim();String sp_security = readSecurity(userName);if (TextUtils.isEmpty(userName)) {Toast.makeText(FindPswActivity.this, "请输入您的用户名",Toast.LENGTH_SHORT).show();return;} else if (!isExistUserName(userName)) {Toast.makeText(FindPswActivity.this, "您输入的用户名不存在",Toast.LENGTH_SHORT).show();return;} else if (TextUtils.isEmpty(validateName)) {Toast.makeText(FindPswActivity.this, "请输入要验证的姓名",Toast.LENGTH_SHORT).show();return;}if (!validateName.equals(sp_security)) {Toast.makeText(FindPswActivity.this, "输入的密保不正确",Toast.LENGTH_SHORT).show();return;} else {//输入的密保正确,重新给用户设置一个密码tv_reset_psw.setVisibility(View.VISIBLE);tv_reset_psw.setText("初始密码:123456");savePsw(userName);}}}});}/*** 保存初始化的密码*/private void savePsw(String userName) {String md5Psw = MD5Utils.md5("123456"); //把密码用Md5加密SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);SharedPreferences.Editor editor = sp.edit(); //获取编辑器editor.putString(userName, md5Psw);editor.commit(); //提交修改}/*** 保存密保到SharedPreferences中*/private void saveSecurity(String validateName) {SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);SharedPreferences.Editor editor = sp.edit();//获取编辑器editor.putString(UtilsHelper.readLoginUserName(this) + "_security",validateName); //存入用户对应的密保editor.commit(); //提交修改}/*** 从SharedPreferences中读取密保*/private String readSecurity(String userName) {SharedPreferences sp = getSharedPreferences("loginInfo", Context.MODE_PRIVATE);String security = sp.getString(userName + "_security", "");return security;}/*** 从SharedPreferences中根据用户输入的用户名来判断是否有此用户*/private boolean isExistUserName(String userName) {boolean hasUserName = false;SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);String spPsw = sp.getString(userName, "");if (!TextUtils.isEmpty(spPsw)) {hasUserName = true;}return hasUserName;}
}
(4)修改清单文件。由于“设置密保”界面向右滑动会关闭该界面,因此需要给该界面天透明主题的样式。
<activityandroid:name=".activity.FindPswActivity"android:theme="@style/AppTheme.TransparentActivity" />
(5)“修改登录”界面。由于点击登录界面上的“忘记密码”文字会跳转到“找回密码”界面,因此在LoginActivity.java中找到onClick()方法,在该方法中的“case R.id.tv_forget_psw:”语句下方添加如下代码:
case R.id.tv_forget_psw:Intent forget=new Intent(LoginActivity.this,FindPswActivity.class);startActivity(forget);break;
(6)“修改设置”界面逻辑代码。由于点击“设置”界面上的“设置密保”条目会跳转到“设置密保”界面,因此需要找到SettingActivity的init()方法,在该方法中的注释“//跳转到设置密保界面”语句下方添加如下代码:
//设置密保的点击事件rl_security_setting.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//跳转到设置密保界面Intent intent = new Intent(SettingActivity.this, FindPswActivity.class);intent.putExtra("from", "security");startActivity(intent);}});
27. 设置模块(四)之设置密保相关推荐
- 【C#+SQL Server+打印组件】实现电商快递单打印系统 四:快递单设置模块设计(附源码和资源)
需要源码和资源请点赞关注收藏后评论区留言私信~~~ 一.快递单设置模块概述 快递单设置模块主要用于自定义快递单模样式,用户可以通过快递单设置窗体添加任意样式快递单的模板,并可以根据实际需要随时修改模板 ...
- 24. 设置模块(一)之收藏
上一节对"我"模块(二)进行了综述(可参见 "我"模块(二) 进行了解),接下来将从设置模块开始详细介绍: "我"模块(一)之收藏 &quo ...
- WISMO模块GPRS上网设置的过程
WISMO模块GPRS上网设置的过程 一) AT指令设置部分 (1) AT+CGCLASS="B"置为"B"模式. (2) AT+CGDCONT=1," ...
- WPF仿网易云音乐系列(二、歌单创建窗口+登录设置模块)
老衲牺牲午休时间写博客,都快把自己感动了,-_-!! 之前上一篇随笔,我看了下评论,有部分人说WPF已经凉凉了,这个我觉得,这只是一个达到自己目的的工具而已,只要自己能用这个工具,得心应手的做出自己想 ...
- VirtualBox虚拟机网络设置(四种方式)
VirtualBox是什么 VirtualBox 是一款 x86 虚拟机软件.原由德国innotek公司开发,2008年Sun收购了Innotek,而Sun于2010年被Oracle收购,2010年1 ...
- gprs java_WISMO模块GPRS上网设置的过程
WISMO模块GPRS上网设置的过程一) AT指令设置部分(1) AT+CGCLASS="B"置为"网络 WISMO模块GPRS上网设置的过程 一) AT指令设置部分 ( ...
- 仿酷狗音乐播放器开发日志二十四 选项设置窗体的实现(附328行xml布局源码)
转载请说明原出处,谢谢~~ 花了两天时间把仿酷狗的选项设置窗体做出来了,当然了只是做了外观.现在开学了,写代码的时间减少,所以整个仿酷狗的工程开发速度减慢了.今天把仿酷狗的选项设置窗体的布局代码分享出 ...
- 仿酷狗音乐播放器开发日志二十四 选项设置窗体的实现(附328行xml布局源码)...
转载请说明原出处,谢谢~~ 花了两天时间把仿酷狗的选项设置窗体做出来了,当然了只是做了外观.现在开学了,写代码的时间减少,所以整个仿酷狗的工程开发速度减慢了.今天把仿酷狗的选项设置窗体的布局代码分享出 ...
- html密保问题设置,QQ密保设置方法_怎么设置QQ密保详细教程【图文】-太平洋电脑网PConline-太平洋电脑网...
我们都知道在QQ申请成功之后,为了QQ账号的安全,我们可以设置密保问题,当我们下次更改密码的时候就需要输入密保问题才可以更改,这样当QQ被盗的时候,想要更改密码也不是那么的容易,同时也可以保护我们的Q ...
最新文章
- jQuery插件开发学习笔记
- ElasticSearch之集群原理
- Jedis工具类(含分布式锁的调用和释放)
- 通过邮箱远程控制电脑
- influxdb数据过期_为什么腾讯QQ的大数据平台选择了InfluxDB数据库?
- javascript java html_JS入门篇(二):在html中如何使用Javascript
- Learnopengl
- python怎么读取csv文件-Python读取csv文件(详解版,看了无师自通)
- 《An Introduction to Ray Tracing》—— 2.4 Ray/Box Intersection
- mali GPU 官网指南
- 0302 GDB调试走起【给PHP写插件】
- 大学语言c 离线作业,大学语文C离线作业(2013下).doc
- EclipseMaven导入Maven项目后在pom.xml出现Missing artifact org.springframework:spring-jdbc:jar:3.2.4.RELEAS
- Java 中的 String、StringBuffer、StringBuilder
- 修改Visata下的无线网卡(Intel 5100 agn)Mac地址
- 事业单位工资计算机公积金计算,求问事业单位住房公积金如何计算
- 往word表中写数据
- 90个外国英文网站强力推荐 (转)
- 杰理之汤姆猫录音变声功能参考【篇】
- MIME类型 swfupload 及 php