
由于这个模块内容较多,篇幅较长,请耐心阅读。
“我”的模块分为四个部分
- [ ] 我的界面
- [ ] 设置界面
- [x] 修改密码界面
- [x] 设置密保和找回密码
一、修改密码
1、创建修改密码界面
在com.boxuegu.activity包中,创建一个java类,命名为ModifyPswActivity。在res/layout文件夹下创建布局文件,命名为activity_modify_psw。
2、修改密码界面代码——activity_modify_psw.xml
1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:background="@drawable/register_bg"> 7 <include layout="@layout/main_title_bar"/> 8 <EditText 9 android:id="@+id/et_original_psw" 10 android:layout_width="fill_parent" 11 android:layout_height="48dp" 12 android:layout_gravity="center_horizontal" 13 android:layout_marginLeft="35dp" 14 android:layout_marginRight="35dp" 15 android:layout_marginTop="35dp" 16 android:background="@drawable/register_user_name_bg" 17 android:drawableLeft="@drawable/psw_icon" 18 android:drawablePadding="10dp" 19 android:gravity="center_vertical" 20 android:hint="请输入原始密码" 21 android:inputType="textPassword" 22 android:paddingLeft="8dp" 23 android:textColor="#000000" 24 android:textColorHint="#a3a3a3" 25 android:textSize="14sp"/> 26 <EditText 27 android:id="@+id/et_new_psw" 28 android:layout_width="fill_parent" 29 android:layout_height="48dp" 30 android:layout_gravity="center_horizontal" 31 android:layout_marginLeft="35dp" 32 android:layout_marginRight="35dp" 33 android:background="@drawable/register_psw_bg" 34 android:drawableLeft="@drawable/psw_icon" 35 android:drawablePadding="10dp" 36 android:hint="请输入新密码" 37 android:inputType="textPassword" 38 android:paddingLeft="8dp" 39 android:singleLine="true" 40 android:textColor="#000000" 41 android:textColorHint="#a3a3a3" 42 android:textSize="14sp"/> 43 <EditText 44 android:id="@+id/et_new_psw_again" 45 android:layout_width="fill_parent" 46 android:layout_height="48dp" 47 android:layout_gravity="center_horizontal" 48 android:layout_marginLeft="35dp" 49 android:layout_marginRight="35dp" 50 android:background="@drawable/register_psw_again_bg" 51 android:drawableLeft="@drawable/psw_icon" 52 android:drawablePadding="10dp" 53 android:hint="请再次输入新密码" 54 android:inputType="textPassword" 55 android:paddingLeft="8dp" 56 android:singleLine="true" 57 android:textColor="#000000" 58 android:textColorHint="#a3a3a3" 59 android:textSize="14sp"/> 60 <Button 61 android:id="@+id/btn_save" 62 android:layout_width="fill_parent" 63 android:layout_height="40dp" 64 android:layout_gravity="center_horizontal" 65 android:layout_marginLeft="35dp" 66 android:layout_marginRight="35dp" 67 android:layout_marginTop="15dp" 68 android:background="@drawable/register_selector" 69 android:text="保存" 70 android:textColor="@android:color/white" 71 android:textSize="18sp"/> 72</LinearLayout> 73
3、修改密码界面逻辑代码——ModifyPswActivity.java
1package com.boxuegu.activity; 2 3import android.content.Intent; 4import android.content.SharedPreferences; 5import android.content.pm.ActivityInfo; 6import com.boxuegu.R; 7import com.boxuegu.utils.AnalysisUtils; 8import com.boxuegu.utils.MD5Utils; 9import android.os.Bundle; 10import android.support.v7.app.AppCompatActivity; 11import android.text.TextUtils; 12import android.view.View; 13import android.widget.Button; 14import android.widget.EditText; 15import android.widget.TextView; 16import android.widget.Toast; 17 18public class ModifyPswActivity extends AppCompatActivity { 19 private TextView tv_main_title; 20 private TextView tv_back; 21 private EditText et_original_psw, et_new_psw, et_new_psw_again; 22 private Button btn_save; 23 private String originalPsw, newPsw, newPswAgain; 24 private String userName; 25 @Override 26 protected void onCreate(Bundle savedIntanceState){ 27 super.onCreate(savedIntanceState); 28 //设置界面布局 29 setContentView(R.layout.activity_modify_psw); 30 //设置界面为竖屏 31 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 32 init(); 33 userName = AnalysisUtils.readLoginUserName(this); 34 } 35 36 //获取界面控件并处理相关控件的点击事件 37 private void init(){ 38 tv_main_title = (TextView) findViewById(R.id.tv_main_title); 39 tv_main_title.setText("修改密码"); 40 tv_back = (TextView) findViewById(R.id.tv_back); 41 et_original_psw = (EditText) findViewById(R.id.et_original_psw); 42 et_new_psw = (EditText) findViewById(R.id.et_new_psw); 43 et_new_psw_again = (EditText) findViewById(R.id.et_new_psw_again); 44 btn_save = (Button) findViewById(R.id.btn_save); 45 tv_back.setOnClickListener(new View.OnClickListener() { 46 @Override 47 public void onClick(View v) { 48 ModifyPswActivity.this.finish(); 49 } 50 }); 51 52 //保存按钮的点击事件 53 btn_save.setOnClickListener(new View.OnClickListener(){ 54 @Override 55 public void onClick(View v) { 56 getEditString(); 57 if (TextUtils.isEmpty(originalPsw)) { 58 Toast.makeText(ModifyPswActivity.this, "请输入原始密码", 59 Toast.LENGTH_SHORT).show(); 60 return; 61 }else if (!MD5Utils.md5(originalPsw).equals(readPsw())) { 62 Toast.makeText(ModifyPswActivity.this, "输入的密码与原始密码不一致", 63 Toast.LENGTH_SHORT).show(); 64 return; 65 }else if (MD5Utils.md5(newPsw).equals(readPsw())) { 66 Toast.makeText(ModifyPswActivity.this, "输入的新密码与原始的密码不能一致", 67 Toast.LENGTH_SHORT).show(); 68 return; 69 }else if (TextUtils.isEmpty(newPsw)) { 70 Toast.makeText(ModifyPswActivity.this, "请输入新密码", 71 Toast.LENGTH_SHORT).show(); 72 return; 73 }else if (TextUtils.isEmpty(newPswAgain)) { 74 Toast.makeText(ModifyPswActivity.this, "请再次输入新密码", 75 Toast.LENGTH_SHORT).show(); 76 return; 77 }else if (!newPsw.equals(newPswAgain)) { 78 Toast.makeText(ModifyPswActivity.this, "两次输入的新密码不一致", 79 Toast.LENGTH_SHORT).show(); 80 return; 81 } else { 82 Toast.makeText(ModifyPswActivity.this,"新密码设置成功", 83 Toast.LENGTH_SHORT).show(); 84 modifyPsw(newPsw); 85 Intent intent = new Intent(ModifyPswActivity.this, LoginActivity.class); 86 startActivity(intent); 87 SettingActivity.instance.finish(); //关闭设置界面 88 ModifyPswActivity.this.finish(); //关闭本界面 89 } 90 } 91 }); 92 } 93 94 //获取控件上的字符串 95 private void getEditString(){ 96 originalPsw = et_original_psw.getText().toString().trim(); 97 newPsw = et_new_psw.getText().toString().trim(); 98 newPswAgain=et_new_psw_again.getText().toString().trim(); 99 } 100 101 //修改登录成功时保存在SharedPreferences中的密码 102 private void modifyPsw(String newPsw){ 103 String md5Psw = MD5Utils.md5(newPsw); 104 SharedPreferences sp = getSharedPreferences("loginInfo",MODE_PRIVATE); 105 SharedPreferences.Editor editor = sp.edit(); //获取编辑器 106 editor.putString(userName,md5Psw); //保存新密码 107 editor.commit(); //提交修改 108 } 109 110 //从SharedPreferences中读取原始密码 111 private String readPsw(){ 112 SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE); 113 String spPsw = sp.getString(userName, ""); 114 return spPsw; 115 } 116}
4、修改设置界面代码
在设置界面逻辑代码(SettingActivity.java)文件中找到init方法,在注释//跳转到修改密码的界面下方添加如下代码
1Intent intent = new Intent(SettingActivity.this,ModifyPswActivity.class); 2startActivity(intent);
二、设置密保和找回密码
1、创建设置密保和找回密码界面
在com.boxuegu.activity包中,创建一个java类,命名为FindPswActivity。在res/layout文件夹下创建布局文件,命名为activity_find_psw。将所需图片find_psw_icon.png导入drawable文件夹中。
2、创建设置密保和找回密码界面界面代码——activity_find_psw.xml
1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:background="@drawable/login_bg"> 7 <include layout="@layout/main_title_bar"/> 8 <TextView 9 android:id="@+id/tv_user_name" 10 android:layout_width="fill_parent" 11 android:layout_height="wrap_content" 12 android:layout_marginLeft="35dp" 13 android:layout_marginRight="35dp" 14 android:layout_marginTop="35dp" 15 android:text="您的用户名是?" 16 android:textColor="@android:color/white" 17 android:textSize="18sp" 18 android:visibility="gone"/> 19 <EditText 20 android:id="@+id/et_user_name" 21 android:layout_width="fill_parent" 22 android:layout_height="48dp" 23 android:layout_marginLeft="35dp" 24 android:layout_marginRight="35dp" 25 android:layout_marginTop="10dp" 26 android:background="@drawable/find_psw_icon" 27 android:hint="请输入您的用户名" 28 android:paddingLeft="8dp" 29 android:singleLine="true" 30 android:textColor="#000000" 31 android:textColorHint="#a3a3a3" 32 android:visibility="gone"/> 33 <TextView 34 android:layout_width="fill_parent" 35 android:layout_height="wrap_content" 36 android:layout_marginLeft="35dp" 37 android:layout_marginRight="35dp" 38 android:layout_marginTop="15dp" 39 android:text="您的姓名是?" 40 android:textColor="@android:color/white" 41 android:textSize="18sp"/> 42 <EditText 43 android:id="@+id/et_validate_name" 44 android:layout_width="fill_parent" 45 android:layout_height="48dp" 46 android:layout_marginLeft="35dp" 47 android:layout_marginRight="35dp" 48 android:layout_marginTop="10dp" 49 android:background="@drawable/find_psw_icon" 50 android:hint="请输入要验证的姓名" 51 android:paddingLeft="8dp" 52 android:singleLine="true" 53 android:textColor="#000000" 54 android:textColorHint="#a3a3a3"/> 55 <TextView 56 android:id="@+id/tv_reset_psw" 57 android:layout_width="fill_parent" 58 android:layout_height="wrap_content" 59 android:layout_marginLeft="35dp" 60 android:layout_marginRight="35dp" 61 android:layout_marginTop="10dp" 62 android:gravity="center_vertical" 63 android:textColor="@android:color/white" 64 android:textSize="15sp" 65 android:visibility="gone"/> 66 <Button 67 android:id="@+id/btn_validate" 68 android:layout_width="fill_parent" 69 android:layout_height="40dp" 70 android:layout_gravity="center_horizontal" 71 android:layout_marginLeft="35dp" 72 android:layout_marginRight="35dp" 73 android:layout_marginTop="15dp" 74 android:background="@drawable/register_selector" 75 android:text="验证" 76 android:textColor="@android:color/white" 77 android:textSize="18sp"/> 78 79</LinearLayout> 80
3、设置密保和找回密码界面逻辑代码
1package com.boxuegu.activity; 2 3import android.content.SharedPreferences; 4import android.content.pm.ActivityInfo; 5import android.support.v7.app.AppCompatActivity; 6import android.os.Bundle; 7import android.text.TextUtils; 8import android.view.View; 9import android.widget.Button; 10import android.widget.EditText; 11import android.widget.TextView; 12import android.widget.Toast; 13import com.boxuegu.R; 14import com.boxuegu.utils.AnalysisUtils; 15import com.boxuegu.utils.MD5Utils; 16 17public class FindPswActivity extends AppCompatActivity { 18 19 //form为security时从设置密保界面跳转过来,否则就从登录界面跳转过来的 20 private String from; 21 private TextView tv_main_title; 22 private TextView tv_back; 23 private Button btn_validate; 24 private EditText et_validate_name; 25 private TextView tv_reset_psw; 26 private EditText et_user_name; 27 private TextView tv_user_name; 28 29 @Override 30 protected void onCreate(Bundle savedInstanceState) { 31 super.onCreate(savedInstanceState); 32 //设置界面布局 33 setContentView(R.layout.activity_find_psw); 34 //设置界面为竖屏 35 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 36 from = getIntent().getStringExtra("from"); 37 init(); 38 } 39 40 //获取界面控件及处理相应控件的点击事件 41 private void init() { 42 tv_main_title = (TextView) findViewById(R.id.tv_main_title); 43 tv_back = (TextView) findViewById(R.id.tv_back); 44 et_validate_name = (EditText) findViewById(R.id.et_validate_name); 45 btn_validate = (Button) findViewById(R.id.btn_validate); 46 tv_reset_psw = (TextView) findViewById(R.id.tv_reset_psw); 47 et_user_name = (EditText) findViewById(R.id.et_user_name); 48 tv_user_name = (TextView) findViewById(R.id.tv_user_name); 49 if ("security".equals(from)){ 50 tv_main_title.setText("设置密保"); 51 }else{ 52 tv_main_title.setText("找回密码"); 53 tv_user_name.setVisibility(View.VISIBLE); 54 et_user_name.setVisibility(View.VISIBLE); 55 } 56 tv_back.setOnClickListener(new View.OnClickListener() { 57 @Override 58 public void onClick(View view) { 59 FindPswActivity.this.finish(); 60 } 61 }); 62 btn_validate.setOnClickListener(new View.OnClickListener() { 63 @Override 64 public void onClick(View view) { 65 String validateName = et_validate_name.getText().toString().trim(); 66 if ("security".equals(from)){ //设置密保 67 if (TextUtils.isEmpty(validateName)){ 68 Toast.makeText(FindPswActivity.this,"请输入要验证的姓名", 69 Toast.LENGTH_SHORT).show(); 70 return; 71 }else{ 72 Toast.makeText(FindPswActivity.this,"密保设置成功", 73 Toast.LENGTH_SHORT).show(); 74 //保存密保到SharedPreferences中 75 saveSecurity(validateName); 76 FindPswActivity.this.finish(); 77 } 78 }else{ //找回密码 79 String userName = et_user_name.getText().toString().trim(); 80 String sp_security = readSecurity(userName); 81 if (TextUtils.isEmpty(userName)){ 82 Toast.makeText(FindPswActivity.this,"请输入您的用户名", 83 Toast.LENGTH_SHORT).show(); 84 return; 85 }else if (!isExistUserName(userName)){ 86 Toast.makeText(FindPswActivity.this,"您输入的用户名不存在", 87 Toast.LENGTH_SHORT).show(); 88 return; 89 }else if (TextUtils.isEmpty(validateName)){ 90 Toast.makeText(FindPswActivity.this,"请输入要验证的姓名", 91 Toast.LENGTH_SHORT).show(); 92 return; 93 }if (!validateName.equals(sp_security)){ 94 Toast.makeText(FindPswActivity.this,"输入的密保不正确", 95 Toast.LENGTH_SHORT).show(); 96 return; 97 }else{ 98 //输入的密保正确,重新给用户设置一个密码:123456 99 tv_reset_psw.setVisibility(View.VISIBLE); 100 tv_reset_psw.setText("初始密码:123456"); 101 savePsw(userName); 102 } 103 } 104 } 105 }); 106 } 107 108 //保存初始化的密码 109 private void savePsw(String userName){ 110 String md5Psw = MD5Utils.md5("123456"); //密码MD5加密 111 SharedPreferences sp = getSharedPreferences("loginInfo",MODE_PRIVATE); 112 SharedPreferences.Editor editor = sp.edit(); //获取编辑器 113 editor.putString(userName,md5Psw); 114 editor.commit(); //提交修改 115 } 116 117 118 private void saveSecurity(String validateName){ 119 SharedPreferences sp = getSharedPreferences("loginInfo",MODE_PRIVATE); 120 SharedPreferences.Editor editor = sp.edit(); //获取编辑器 121 //存入对应账户的密保 122 editor.putString(AnalysisUtils.readLoginUserName(this)+"_security",validateName); 123 editor.commit(); //提交修改 124 } 125 126 //从SharedPreferences中读取密保 127 private String readSecurity(String userName){ 128 SharedPreferences sp = getSharedPreferences("loginInfo",MODE_PRIVATE); 129 String security = sp.getString(userName+"_security",""); 130 return security; 131 } 132 133 //从SharedPreferences中根据用户输入的用户名来判断是否有这个用户 134 private boolean isExistUserName(String userName){ 135 boolean hasUserName = false; 136 SharedPreferences sp = getSharedPreferences("loginInfo",MODE_PRIVATE); 137 String spPsw = sp.getString(userName,""); 138 if (!TextUtils.isEmpty(spPsw)){ 139 hasUserName=true; 140 } 141 return hasUserName; 142 } 143}
4、修改代码
(1)、修改登录界面
到登录界面逻辑代码(LoginActivity.java)文件夹中找到init方法。在注释//跳转到找回密码界面下方添加如下代码
1Intent intent = new Intent(LoginActivity.this, FindPswActivity.class); 2startActivity(intent);
(2)、修改设置界面
到设置界面逻辑代码(SettingActivity.java)文件夹中找到init方法。在注释//跳转到设置密保界面下方添加如下代码
1Intent intent = new Intent(SettingActivity.this,FindPswActivity.class); 2intent.putExtra("from","security"); 3startActivity(intent);

