zoukankan      html  css  js  c++  java
  • AndroidStudio制作“我”的界面,设置,修改密码,设置密保和找回密码

    前言

    大家好,我是 Vic,今天给大家带来AndroidStudio制作“我”的界面,设置,修改密码,设置密保和找回密码的概述,希望你们喜欢

    学习目标

    1. 掌握修改密码功能的开发,和实现用户密码的修改;
    2. 掌握设置密保的功能开发,通过密保我们可以找回用户的密码,来保证用户的安全。
    3. 具体布局将不在展示,只说明一些功能模块的实现。

    工具类

    对于一个项目来说,项目中将多次用到sharedPreferences共享参数,去存储用户的登录状态或清除登录状态,“我”的界面也要求用到读取用户姓名的方法,所以我们干脆把这三个方法都扔到AnalysisUtils里面吧。

    在Utils包中新建一个Java类,名为AnalysisUtils。

    public class AnalysisUtils {
        //读取用户名
        public static String readLoginUserName(Context context){
            SharedPreferences sharedPreferences = context.getSharedPreferences("loginInfo",Context.MODE_PRIVATE);
            String userName=sharedPreferences.getString("loginUserName","");
            return userName;
        }
    
        //读取登录状态
        public static boolean readLoginStatus(Context context){
            SharedPreferences sharedPreferences = context.getSharedPreferences("loginInfo",Context.MODE_PRIVATE);
            boolean isLogin=sharedPreferences.getBoolean("isLogin",false);
            return isLogin;
        }
    
        //清除登录状态
        public static void cleanLoginStatus(Context context){
            SharedPreferences sharedPreferences = context.getSharedPreferences("loginInfo",Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putBoolean("isLogin",false);
            editor.putString("loginUserName","");
            editor.commit();
        }
    }
    

    我的界面

    我的界面的头像部分,要实现两个功能:

    1. 打开“我”的界面后,要进行判断是否已登录,已登录显示用户名,未登录显示“点击登陆”。

    2. 头像点击后,会判断是否登录,如果登录了,则跳转到个人资料界面,如果没登录,则跳转到login登录的页面。

    完成第一个功能

    onViewCreate()里写个if else判断语句,根据当前登录状态来显示同像下相应的文本。

    if (AnalysisUtils.readLoginStatus(getActivity())){
            tv_user_name.setText(AnalysisUtils.readLoginUserName(getActivity()));
         }else {
            tv_user_name.setText("点击登录");
    }
    

    登陆

    未登录时,点击登陆,打开登陆页面后,需要MainActivity更新状态并显示,所以用startActivityForResult()方法打开。

    老样子,用startActivityForResult()打开,MainActivity就要加上onActivityForResult()方法来执行响应。

    接下来看看相关代码:

    //onActivityResult();
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            //判断从LoginActivity传过来登陆状态,并执行响应动作。
            if (data!=null){
                boolean isLogin=data.getBooleanExtra("isLogin",false);
                //从登录活动获得isLogin==true,从设置活动获得isLogin==false,他们的请求码都是1
                //之后还可以根据请求码和结果码完成更多需求
                if (isLogin){
                    //0
                    setSelectStatus(0);
                }else {
                    //我
                    setSelectStatus(2);
                }
            }
    }
    

    退出清除登陆状态

    连续点击返回两次则退出,两次点击间隔超过2秒则提示再按一次退出。

     protected long exitTime;
        //给MainActivity加上退出清除登陆状态的方法。
        // 连续点击返回两次则退出,两次点击间隔超过2秒则提示再按一次退出。
        @Override
        public boolean onKeyDown(int keyCode,KeyEvent event){
            if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
                if ((System.currentTimeMillis()-exitTime) > 2000){
                    Toast.makeText(MainActivity.this,"再按一次退出博学谷",Toast.LENGTH_SHORT).show();
                    exitTime=System.currentTimeMillis();
                }else {
                    this.finish();
                    if (AnalysisUtils.readLoginStatus(this)){
                        AnalysisUtils.cleanLoginStatus(this);
                    }
                    System.exit(0);
                }
                return true;
            }
            return super.onKeyDown(keyCode,event);
    }
    

    设置页面功能模块

    实例化:

    private void initView(){
            rl_modify_psw=findViewById(R.id.rl_modify_psw);
            rl_security_setting=findViewById(R.id.rl_security_setting);
            rl_exit_login=findViewById(R.id.rl_exit_login);
            //标题栏
            title_bar=findViewById(R.id.title_bar);
            tv_back=findViewById(R.id.tv_back);
            tv_main_title=findViewById(R.id.tv_main_title);
            //给tv_main_title设置个文本,给title_bar加个背景
            tv_main_title.setText("设置");
            title_bar.setBackgroundColor(Color.parseColor("#30B4FF"));
            //添加监听器
            tv_back.setOnClickListener(this);
            rl_modify_psw.setOnClickListener(this);
            rl_security_setting.setOnClickListener(this);
            rl_exit_login.setOnClickListener(this);
    }
    

    修改密码

    private void initView() {
            //标题栏
            title_bar=findViewById(R.id.title_bar);
            tv_back=findViewById(R.id.tv_back);
            tv_main_title=findViewById(R.id.tv_main_title);
            //modify
            et_original_psw=findViewById(R.id.et_original_psw);
            et_new_psw=findViewById(R.id.et_new_psw);
            et_new_psw_again=findViewById(R.id.et_new_psw_again);
            btn_save=findViewById(R.id.btn_save);
            //tv_main_title 修改密码
            tv_main_title.setText("修改密码");
            //响应
            btn_save.setOnClickListener(this);
            tv_back.setOnClickListener(this);
    }
    
    private void submit() {
            String psw=et_original_psw.getText().toString().trim();
            String newPsw=et_new_psw.getText().toString().trim();
            String again=et_new_psw_again.getText().toString().trim();
            if (TextUtils.isEmpty(psw)){
                Toast.makeText(this,"请输入原始密码",Toast.LENGTH_SHORT).show();
                return;
            }else if (!MD5Utils.md5(psw).equals(readPsw())){
                Log.i("MD5Utils.md5(psw)",""+MD5Utils.md5(psw));
                Log.i("readPsw",""+readPsw());
                Toast.makeText(this,"输入的密码与原始密码不一致",Toast.LENGTH_SHORT).show();
                return;
            }else if (MD5Utils.md5(newPsw).equals(readPsw())){
                Toast.makeText(this,"输入的新密码与原始密码不能一致",Toast.LENGTH_SHORT).show();
                return;
            }else if (TextUtils.isEmpty(psw)){
                Toast.makeText(this,"请输入密码",Toast.LENGTH_SHORT).show();
                return;
            }else if (TextUtils.isEmpty(again)){
                Toast.makeText(this,"请再次输入新密码",Toast.LENGTH_SHORT).show();
            }else if (!newPsw.equals(again)){
                Toast.makeText(this,"再次输入的新密码不一致",Toast.LENGTH_SHORT).show();
                return;
            }else {
                Toast.makeText(this,"新密码设置成功", Toast.LENGTH_SHORT).show();
                modifyPsw(newPsw);//
                Intent intent=new Intent(ModifyPswActivity.this,LoginActivity.class);
                startActivity(intent);
                //关闭设置页面
                //在submit方法中,密码修改成功之后除了把当前页面关了,还要把设置界面也关了,所以用到instance
                SettingActivity.instance.finish();
                //关闭修改密码页面
                ModifyPswActivity.this.finish();
            }
    }
    
    //modifypsw
    String md5psw=MD5Utils.md5(newPsw);
    SharedPreferences sharedPreferences=getSharedPreferences("loginInfo",MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(userName,md5psw);
    editor.commit();
    
    //readPsw
    SharedPreferences sharedPreferences=getSharedPreferences("loginInfo",MODE_PRIVATE);
    String spPsw=sharedPreferences.getString(userName,"");
    Log.i("username",userName);
    Log.i("spPsw",spPsw);
    return spPsw;
    

    设置密保和找回密码

    主要功能代码:

      /**
         * 保存初始化密码
         **/
        private void savePsw(String name, String resetPsw){
            /*String md5Psw= MD5Utils.md5("123456");
            SharedPreferences sharedPreferences = getSharedPreferences("loginInfo",MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString(name,md5Psw);
            editor.commit();*/
            String md5Psw = MD5Utils.md5(resetPsw);
            SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);
            SharedPreferences.Editor editor = sp.edit();
            editor.putString(name, md5Psw);
            editor.commit();
        }
        private boolean isExistUserName(String name){
            boolean hasUserName=false;
            SharedPreferences sharedPreferences=getSharedPreferences("loginInfo",MODE_PRIVATE);
            String spPsw=sharedPreferences.getString(name,"");
            if (!TextUtils.isEmpty(spPsw)){
                hasUserName=true;
            }
            return hasUserName;
        }
        /**
         * 读取密保
         **/
        private String readSecurity(String name){
            SharedPreferences sharedPreferences=getSharedPreferences("loginInfo",MODE_PRIVATE);
            String security=sharedPreferences.getString(name+"_security","");
            return security;
        }
        /**
         * 保存密保名字
         **/
        private void saveSecurity(String validateName) {
            SharedPreferences sharedPreferences=getSharedPreferences("loginInfo",MODE_PRIVATE);
            SharedPreferences.Editor editor=sharedPreferences.edit();
            editor.putString(AnalysisUtils.readLoginUserName(this)+"_security",validateName);
            editor.commit();
        }
    

    保存功能代码:

    private void submit() {
            // validate
            String validateName = et_validate_name.getText().toString().trim();
            if ("security".equals(from)) {  //设置密保
                if (TextUtils.isEmpty(validateName)) {
                    Toast.makeText(this, "请输入要验证的姓名", Toast.LENGTH_SHORT).show();
                    return;
                } else {
                    Toast.makeText(this, "密保设置成功", Toast.LENGTH_SHORT).show();
                    //保存到
                    saveSecurity(validateName);
                    FindPwdActivity.this.finish();
                    return;
                }
            }else {
                final String name=et_user_name.getText().toString().trim();
                String sp_security=readSecurity(name);
                if (TextUtils.isEmpty(name)){
                    Toast.makeText(this,"请输入您的用户名",Toast.LENGTH_SHORT).show();
                    return;
                }else if (!isExistUserName(name)){
                    Toast.makeText(this,"您输入的用户名不存在",Toast.LENGTH_SHORT).show();
                    return;
                }else if (TextUtils.isEmpty(validateName)){
                    Toast.makeText(this,"请输入要验证的姓名",Toast.LENGTH_SHORT).show();
                    return;
                }else if (!validateName.equals(sp_security)){
                    Toast.makeText(this,"输入的密保不正确",Toast.LENGTH_SHORT).show();
                    return;
                }else {
                    //输入密保正确,重新给用户设置一个密码
                    tv_reset_psw.setVisibility(View.VISIBLE);
                    et_reset_psw.setVisibility(View.VISIBLE);
                    btn_validate.setText("确认");
                    btn_validate.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            String resetPsw = et_reset_psw.getText().toString().trim();
                            //暂时仅验证不为空
                            if (!TextUtils.isEmpty(resetPsw)) {
                                savePsw(name, resetPsw);
                                FindPwdActivity.this.finish();
                            } else {
                                Toast.makeText(FindPwdActivity.this, "请输入要设置的新密码", Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
                }
            }
        }
    

    修复fragment

    在未登录状态下,点击“点击登录”按钮,登录完成后,应该显示“我”的界面,并且正常显示用户名。

    getSupportFragmentManager().beginTransaction().replace(R.id.main_body,new CourseFragment()).commit();
    

    把该代码放入到fragment刷新中。

    如果觉得不错,那就点个赞吧!❤️

    总结

    • 本文讲了AndroidStudio制作“我”的界面,设置,修改密码,设置密保和找回密码,界面的布局介绍,如果您还有更好地理解,欢迎沟通
    • 定位:分享 Android&Java知识点,有兴趣可以继续关注
  • 相关阅读:
    .net操作cookies
    sqlserver 自增列清零
    数据库之mysql视图、触发器、事务、存储过程、函数等相关内容-47
    知识补充之面向对象魔法方法及mysql等相关内容
    数据库之mysql多表查询(子查询)以及pymysql等相关内容-46
    数据库之mysql多表查询(连表)以及pymysql等相关内容-45
    数据库之mysql约束条件、表关系、记录操作等相关内容-44
    数据库之mysq修改表、表字段类型等相关内容-43
    数据库之mysql基础等相关内容-42
    并发编程之基于协程的高并发服务端、面向对象回顾等相关内容-41
  • 原文地址:https://www.cnblogs.com/dashucoding/p/11932647.html
Copyright © 2011-2022 走看看