Android开发经验谈Android技术知识Android开发

26. 设置模块(三)之修改密码

2019-01-09  本文已影响14人  Jennyni1122

上一节对欢迎模块进行了综述(可参见 “我”模块(二) 进行了解),接下来将从设置模块开始详细介绍:

知识点

修改密码

任务综述:

“修改密码”界面主要用于保证用户信息安全性。修改密码需要输入一次原始密码和一次新密码,密码修改成功后需要把SharedPreferences中存储的旧密码修改成新密码。

8. “修改密码”界面

任务分析:
“修改密码”界面主要是让用户在必要时修改自己的原始密码,从而保证用户信息的安全性,界面效果如图所示。

image.png

任务实施:
(1)创建“修改密码”界面:ModifyPswActivity & activity_modify_psw。

(2)放置界面控件。
2个EditText控件,分别用于输入原始密码与新密码,
1个Button控件作为“保存”按钮。

activity_modify_psw.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    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" />
    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="25dp"
        android:layout_marginRight="25dp"
        android:layout_marginTop="35dp"
        app:cardCornerRadius="5dp"
        app:cardElevation="3dp"
        app:cardPreventCornerOverlap="false"
        app:cardUseCompatPadding="true">
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <EditText
                android:id="@+id/et_original_psw"
                android:layout_width="fill_parent"
                android:layout_height="48dp"
                android:layout_gravity="center_horizontal"
                android:background="@drawable/register_edittext_top_radius"
                android:drawableLeft="@drawable/psw_icon"
                android:drawablePadding="10dp"
                android:gravity="center_vertical"
                android:hint="请输入原始密码"
                android:inputType="textPassword"
                android:paddingLeft="8dp"
                android:textColor="#000000"
                android:textColorHint="@color/register_hint_text_color"
                android:textCursorDrawable="@null"
                android:textSize="14sp" />
            <View
                android:layout_width="fill_parent"
                android:layout_height="1dp"
                android:background="@color/divider_line_color" />
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <EditText
                    android:id="@+id/et_new_psw"
                    android:layout_width="fill_parent"
                    android:layout_height="48dp"
                    android:layout_gravity="center_horizontal"
                    android:background="@drawable/register_edittext_bottom_radius"
                    android:drawableLeft="@drawable/psw_icon"
                    android:drawablePadding="10dp"
                    android:hint="请输入新密码"
                    android:inputType="textPassword"
                    android:paddingLeft="8dp"
                    android:singleLine="true"
                    android:textColor="#000000"
                    android:textColorHint="#a3a3a3"
                    android:textCursorDrawable="@null"
                    android:textSize="14sp" />
                <ImageView
                    android:id="@+id/iv_show_psw"
                    android:layout_width="15dp"
                    android:layout_height="48dp"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="8dp"
                    android:src="@drawable/hide_psw_icon" />
            </RelativeLayout>
        </LinearLayout>
    </android.support.v7.widget.CardView>
    <Button
        android:id="@+id/btn_save"
        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="18sp" />
</LinearLayout>

9. “修改密码”界面逻辑代码

任务分析:
“修改密码”界面主要用于输入原始密码与新密码,输入的原始密码需要与从SharedPreferences中读取的原始密码一致,输入的新密码与原始密码不能相同。以上条件都符合之后,点击“保存”按钮将提示新密码设置成功,同时修改SharedPreferences中的原始密码。

任务实施:
(1)获取界面控件。在ModifyPswActicity中创建界面控件的初始化方法init(),用于获取“修改密码”界面所要用到的控件以及设置后退键和“保存”按钮的点击事件。

(2)修改SharedPreferences中的原始密码。由于新密码设置成功时需要修改保存在SharedPreferences中的原始密码,因此需要创建modifyPsw()方法实现此功能。

ModifyPswActivity.java

public class ModifyPswActivity extends AppCompatActivity {
    private TextView tv_main_title, tv_back;
    private Button btn_save;
    private RelativeLayout rl_title_bar;
    private EditText et_original_psw, et_new_psw;
    private String originalPsw, newPsw;
    private String userName;
    private SwipeBackLayout layout;
    private ImageView iv_show_psw;
    private boolean isShowPsw = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        layout = (SwipeBackLayout) LayoutInflater.from(this).inflate(
                R.layout.base, null);
        layout.attachToActivity(this);
        setContentView(R.layout.activity_modify_psw);
        init();
        userName = UtilsHelper.readLoginUserName(this);
    }
    /**
     * 获取界面控件并处理相关控件的点击事件
     */
    private void init() {
        tv_main_title = (TextView) findViewById(R.id.tv_main_title);
        tv_main_title.setText("修改密码");
        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_original_psw = (EditText) findViewById(R.id.et_original_psw);
        et_new_psw = (EditText) findViewById(R.id.et_new_psw);
        iv_show_psw = (ImageView) findViewById(R.id.iv_show_psw);
        btn_save = (Button) findViewById(R.id.btn_save);
        tv_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ModifyPswActivity.this.finish();
            }
        });
        iv_show_psw.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                newPsw = et_new_psw.getText().toString();
                if (isShowPsw) {
                    iv_show_psw.setImageResource(R.drawable.hide_psw_icon);
                    //隐藏密码
                    et_new_psw.setTransformationMethod(PasswordTransformationMethod.
                            getInstance());
                    isShowPsw = false;
                    if (newPsw != null) {
                        et_new_psw.setSelection(newPsw.length());
                    }
                } else {
                    iv_show_psw.setImageResource(R.drawable.show_psw_icon);
                    //显示密码
                    et_new_psw.setTransformationMethod(HideReturnsTransformationMethod.
                            getInstance());
                    isShowPsw = true;
                    if (newPsw != null) {
                        et_new_psw.setSelection(newPsw.length());
                    }
                }
            }
        });
        //保存按钮的点击事件
        btn_save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getEditString();
                if (TextUtils.isEmpty(originalPsw)) {
                    Toast.makeText(ModifyPswActivity.this, "请输入原始密码",
                            Toast.LENGTH_SHORT).show();
                    return;
                } else if (!MD5Utils.md5(originalPsw).equals(readPsw())) {
                    Toast.makeText(ModifyPswActivity.this, "输入的密码与原始密码不一致",
                            Toast.LENGTH_SHORT).show();
                    return;
                } else if (MD5Utils.md5(newPsw).equals(readPsw())) {
                    Toast.makeText(ModifyPswActivity.this, "输入的新密码与原始密码不能一致",
                            Toast.LENGTH_SHORT).show();
                    return;
                } else if (TextUtils.isEmpty(newPsw)) {
                    Toast.makeText(ModifyPswActivity.this, "请输入新密码",
                            Toast.LENGTH_SHORT).show();
                    return;
                } else {
                    Toast.makeText(ModifyPswActivity.this, "新密码设置成功",
                            Toast.LENGTH_SHORT).show();
                    //修改登录成功时保存在SharedPreferences中的密码
                    modifyPsw(newPsw);
                    Intent intent = new Intent(ModifyPswActivity.this,
                            LoginActivity.class);
                    startActivity(intent);
                    SettingActivity.instance.finish(); //关闭设置界面
                    ModifyPswActivity.this.finish();   //关闭本界面
                }
            }
        });
    }
    /**
     * 获取控件上的字符串
     */
    private void getEditString() {
        originalPsw = et_original_psw.getText().toString().trim();
        newPsw = et_new_psw.getText().toString().trim();
    }
    /**
     * 修改登录成功时保存在SharedPreferences中的密码
     */
    private void modifyPsw(String newPsw) {
        String md5Psw = MD5Utils.md5(newPsw);            //把密码用MD5加密
        SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();  //获取编辑器
        editor.putString(userName, md5Psw);             //保存新密码
        editor.commit();                                    //提交修改
    }
    /**
     * 从SharedPreferences中读取原始密码
     */
    private String readPsw() {
        SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);
        String spPsw = sp.getString(userName, "");
        return spPsw;
    }
}

(3)修改清单文件。由于“修改密码”界面向右滑动会关闭该界面,因此需要给该界面添加透明主题的样式。

 <activity
        android:name=".activity.ModifyPswActivity"
        android:theme="@style/AppTheme.TransparentActivity" />

(4)修改“设置”界面逻辑代码。由于点击“设置”界面上的“修改密码”条目跳转到“修改密码”界面,需要找到SettingActivity中的init()方法,在该方法中的注释“//跳转到修改密码的界面”语句下方添加如下代码:

        //修改密码的点击事件
        rl_modify_psw.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //跳转到修改密码的界面
                Intent intent = new Intent(SettingActivity.this, ModifyPswActivity.class);
                startActivity(intent);
            }
        });
上一篇下一篇

猜你喜欢

热点阅读