【Android学习】简单的登录页面和业务逻辑实现

实现功能

1 登录页:密码登录和验证码登录
2 忘记密码页:修改密码
3 页面基础逻辑 java代码

基础页面

在这里插入图片描述
在这里插入图片描述

XML

login_main.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"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">
<!--    单选框--><RadioGroupandroid:id="@+id/rg_login"android:layout_width="match_parent"android:layout_height="@dimen/item_layout_height"android:orientation="horizontal"><RadioButtonandroid:id="@+id/rg_password"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:text="@string/login_by_password"android:textSize="@dimen/common_font_size"android:checked="true"/><RadioButtonandroid:id="@+id/rg_vertifycode"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:text="@string/login_by_vertifycode"android:textSize="@dimen/common_font_size"/></RadioGroup><LinearLayoutandroid:layout_width="match_parent"android:layout_height="@dimen/item_layout_height"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_phone"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="@string/phone_number"android:textColor="@color/black"android:textSize="@dimen/common_font_size"/><EditTextandroid:id="@+id/et_phone"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:layout_marginTop="5dp"android:layout_marginBottom="5dp"android:hint="@string/inout_phone_number"android:background="@drawable/editor_selector"android:textColor="@color/black"android:maxLength="11"android:inputType="number"android:textColorHint="@color/grey"android:textSize="@dimen/common_font_size"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="@dimen/item_layout_height"android:orientation="horizontal"><TextViewandroid:id="@+id/tv_password"android:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="@string/login_password"android:textColor="@color/black"android:textSize="@dimen/common_font_size"/><RelativeLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"><EditTextandroid:id="@+id/et_password"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:layout_marginTop="5dp"android:layout_marginBottom="5dp"android:inputType="numberPassword"android:hint="@string/input_password"android:background="@drawable/editor_selector"android:textColor="@color/black"android:maxLength="6"android:textColorHint="@color/grey"android:textSize="@dimen/common_font_size"/><Buttonandroid:id="@+id/btn_forget"android:layout_width="wrap_content"android:layout_height="match_parent"android:text="@string/forget_password"android:layout_alignParentEnd="true"android:textColorHint="@color/black"android:textSize="@dimen/common_font_size"/></RelativeLayout></LinearLayout><CheckBoxandroid:id="@+id/ck_remember"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/remember_password"android:textColorHint="@color/black"android:textSize="@dimen/common_font_size"/><Buttonandroid:id="@+id/btn_login"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/login"android:textColorHint="@color/black"android:textSize="@dimen/btn_font_size"/>
</LinearLayout>
login_forget_password.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"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="60dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="@string/input_new_password"android:textColor="@color/black"android:textSize="@dimen/common_font_size"/><EditTextandroid:id="@+id/et_password_first"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:layout_marginTop="5dp"android:layout_marginBottom="5dp"android:inputType="numberPassword"android:hint="@string/input_new_password_hint"android:background="@drawable/editor_selector"android:textColor="@color/black"android:maxLength="11"android:textColorHint="@color/grey"android:textSize="@dimen/common_font_size"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="60dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="@string/confirm_new_password"android:textColor="@color/black"android:textSize="@dimen/common_font_size"/><EditTextandroid:id="@+id/et_password_second"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:layout_marginTop="5dp"android:layout_marginBottom="5dp"android:hint="@string/confirm_new_password_again"android:background="@drawable/editor_selector"android:textColor="@color/black"android:maxLength="11"android:inputType="number"android:textColorHint="@color/grey"android:textSize="@dimen/common_font_size"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="60dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="match_parent"android:gravity="center"android:text="@string/verifycode"android:textColor="@color/black"android:textSize="@dimen/common_font_size"/><RelativeLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"><EditTextandroid:id="@+id/et_verifycode"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:layout_marginTop="5dp"android:layout_marginBottom="5dp"android:inputType="numberPassword"android:hint="@string/input_verifycode"android:background="@drawable/editor_selector"android:textColor="@color/black"android:maxLength="6"android:textColorHint="@color/grey"android:textSize="@dimen/common_font_size"/><Buttonandroid:id="@+id/btn_verificode"android:layout_width="wrap_content"android:layout_height="match_parent"android:text="@string/get_verifycode"android:layout_alignParentEnd="true"android:textColorHint="@color/black"android:textSize="@dimen/common_font_size"/></RelativeLayout></LinearLayout><Buttonandroid:id="@+id/btn_confirm"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/done"android:textColorHint="@color/black"android:textSize="@dimen/btn_font_size"/>
</LinearLayout>

Java

loginMain.java
package com.example.learn;import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.BlendMode;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;import com.example.learn.utils.ViewUtil;import java.util.Random;public class LoginMainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener, View.OnClickListener {private EditText et_phone;private TextView tv_password;private EditText et_password;private Button btn_forget;private CheckBox ck_remember;private RadioButton rg_password;private RadioButton rg_vertifycode;private ActivityResultLauncher<Intent> register;private Button btn_login;//定义固定密码 调试使用private String mPassword = "111111";private String verifyCode;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login_main);RadioGroup rg_login = findViewById(R.id.rg_login);et_phone = findViewById(R.id.et_phone);tv_password = findViewById(R.id.tv_password);et_password = findViewById(R.id.et_password);btn_forget = findViewById(R.id.btn_forget);ck_remember = findViewById(R.id.ck_remember);rg_password = findViewById(R.id.rg_password);rg_vertifycode = findViewById(R.id.rg_vertifycode);btn_login = findViewById(R.id.btn_login);//设置监听器rg_login.setOnCheckedChangeListener(this);//为电话号码、密码增加文本长度变换监听器et_phone.addTextChangedListener(new HideKeyboardWatch(et_phone, 11));et_password.addTextChangedListener(new HideKeyboardWatch(et_password, 6));//为忘记密码/获取验证码增加点击事件btn_forget.setOnClickListener(this);//login按钮btn_login.setOnClickListener(this);//全局registerActivityForResultregister = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),new ActivityResultCallback<ActivityResult>() {//接收返回值@Overridepublic void onActivityResult(ActivityResult result) {Intent intent = result.getData();if(intent!=null && result.getResultCode()==Activity.RESULT_OK){mPassword = intent.getStringExtra("new_password");}}});}@Overridepublic void onCheckedChanged(RadioGroup radioGroup, int checkedId) {switch (checkedId) {case R.id.rg_password://密码登录//验证码登录tv_password.setText(getString(R.string.login_password));et_password.setHint(getString(R.string.input_password));btn_forget.setText(getString(R.string.forget_password));ck_remember.setVisibility(View.VISIBLE);//显示break;case R.id.rg_vertifycode://验证码登录tv_password.setText(getString(R.string.verifycode));et_password.setHint(getString(R.string.input_verifycode));btn_forget.setText(getString(R.string.get_verifycode));ck_remember.setVisibility(View.GONE);//隐藏break;}}@Overridepublic void onClick(View view) {String phone = et_phone.getText().toString();if (phone.length() < 11) {Toast.makeText(this, "手机号码不足11位", Toast.LENGTH_SHORT).show();return;}switch (view.getId()) {case R.id.btn_forget://说明选择是密码登录// 此时按钮为忘记密码if (rg_password.isChecked()) {//此时可将手机号传递给下一个忘记密码页面Intent intent = new Intent(this, LoginForgetActivity.class);intent.putExtra("phone", phone);register.launch(intent);}else if(rg_vertifycode.isChecked()){//生成6位随机验证码verifyCode = String.format("%6d",new Random().nextInt(999999));//弹出对话框 便于用户记住验证码AlertDialog.Builder adb = new AlertDialog.Builder(this);adb.setTitle("请记住验证码");adb.setMessage("手机号"+phone+",验证码为"+verifyCode+",请输入验证码!");adb.setPositiveButton("好的",null);AlertDialog ad =adb.create();ad.show();}break;case R.id.btn_login://如果密码方式登录 判断密码是否正确if(rg_password.isChecked()){if(!mPassword.equals(et_password.getText().toString())){Toast.makeText(this,"请输入正确密码",Toast.LENGTH_SHORT).show();return;}loginSuccess();}else if(rg_vertifycode.isChecked()){if(!verifyCode.equals(et_password.getText().toString())){Toast.makeText(this,"请输入正确验证码",Toast.LENGTH_SHORT).show();return;}loginSuccess();}break;}}private void loginSuccess() {String desc=String.format("您的手机号码为%s,恭喜您登陆成功!",et_phone.getText().toString());AlertDialog.Builder adb = new AlertDialog.Builder(this);adb.setTitle("恭喜您登陆成功!");adb.setMessage("您的手机号为"+et_phone.getText().toString());adb.setNegativeButton("确定返回", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {//结束当前活动页面finish();}});adb.setPositiveButton("我再看看",null);AlertDialog ad = adb.create();ad.show();}//编辑框监听器,当输入文本长度达到最大长度,隐藏键盘。private class HideKeyboardWatch implements TextWatcher {private EditText mView;private int maxLen;public HideKeyboardWatch(EditText et, int len) {this.mView = et;this.maxLen = len;}@Overridepublic void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void afterTextChanged(Editable s) {if (s.toString().length() == maxLen) {//隐藏软键盘ViewUtil.hideKeyboard(LoginMainActivity.this, mView);}}}
}
login_forget_password.java
package com.example.learn;import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;import java.util.Random;public class LoginForgetActivity extends AppCompatActivity implements View.OnClickListener {private String mPhone;private String verifyCode;private EditText et_password_first;private EditText et_password_second;private EditText et_verifycode;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login_forget);mPhone = getIntent().getStringExtra("phone");findViewById(R.id.btn_verificode).setOnClickListener(this);findViewById(R.id.btn_confirm).setOnClickListener(this); et_password_first = findViewById(R.id.et_password_first);et_password_second = findViewById(R.id.et_password_second);et_verifycode = findViewById(R.id.et_verifycode);}@Overridepublic void onClick(View view) {switch(view.getId()){case R.id.btn_verificode://生成6位随机验证码verifyCode = String.format("%6d",new Random().nextInt(999999));//弹出对话框 便于用户记住验证码AlertDialog.Builder adb = new AlertDialog.Builder(this);adb.setTitle("请记住验证码");adb.setMessage("手机号"+mPhone+",验证码为"+verifyCode+",请输入验证码!");adb.setPositiveButton("好的",null);AlertDialog ad =adb.create();ad.show();break;case R.id.btn_confirm:String pf = et_password_first.getText().toString();String ps = et_password_second.getText().toString();if(pf.length()<6){Toast.makeText(this,"请输入正确密码",Toast.LENGTH_SHORT).show();return;}if(!pf.equals(ps)){Toast.makeText(this,"两次密码不同",Toast.LENGTH_SHORT).show();return;}if(!verifyCode.equals(et_verifycode.getText().toString())){Toast.makeText(this,"验证码不正确",Toast.LENGTH_SHORT).show();return;}Toast.makeText(this,"密码修改成功",Toast.LENGTH_SHORT).show();Intent intent = new Intent();intent.putExtra("new_password",pf);setResult(Activity.RESULT_OK,intent);finish();//结束当前页面break;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/325753.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2-6 任务 猜数小游戏(单次版)

本任务要求编写一个猜数小游戏&#xff08;单次版&#xff09;&#xff0c;游戏规则是计算机产生一个0到100之间的随机整数&#xff0c;用户通过输入猜测的数字进行猜测&#xff0c;根据猜测情况给出提示&#xff0c;直到猜对为止。编程思路是利用while循环和多分支结构实现永真…

DELL T630服务器iDRAC分辨率调整办法

对于Dell T630服务器的iDRAC分辨率调整&#xff0c;您需要登录到iDRAC的Web界面。以下是详细的步骤&#xff1a; 登录iDRAC&#xff1a;在浏览器中输入iDRAC的IP地址&#xff0c;然后使用用户名&#xff08;通常是“root”&#xff09;和密码登录。 导航到虚拟控制台&#xff…

MyBatis——在WEB中使用MyBatis(MVC架构模式)

一、在 Web 应用中使用 MyBatis 项目目录结构 pojo package org.qiu.bank.pojo;/*** 账户类&#xff0c;封装账户数据* author 秋玄* version 1.0* package org.qiu.bank.pojo* date 2022-09-27-20:31* since 1.0*/ public class Account {private Long id;private String …

数据分析的统计推断

数据分析的统计推断 前言一、提出问题二、统计归纳方法三、统计推断四、统计推断步骤如何进行统计推断统计推断的基本问题点估计区间估计总体方差已知总体方差未知 假设检验假设检验的假设显著性水平 五、检验统计量常见的检验统计量 六、检验方法七、拒绝域八、假设检验步骤九…

报告!Golang冲上来啦!

今天又来讲Go语言&#xff0c;根据全球知名的编程语言排行榜TIOBE在4月份公布的最新的编程语言排名&#xff0c;令人瞩目的是&#xff0c;Go语言已经跃升至历史最高位&#xff0c;位列排行榜第七名&#xff0c;并且Go语言是前十榜单中最年轻的编程语言。这一成绩不仅彰显了Go语…

鲁教版六年级数学上册-笔记

文章目录 第一章 丰富的图形世界1 生活中的立体图形2 展开和折叠3 截一个几何体4 从三个方向看物体的形状 第二章 有理数及其运算1 有理数2 数轴3 绝对值4 有理数的加法5 有理数的减法6 有理数的加减混合运算7 有理数的乘法8 有理数的除法9 有理数的乘方10 科学计数法11 有理数…

CentOS7 安装 Kamailio

https://www.kamailio.org/wiki/packages/rpms 官方文档说 yum -y install yum-utils yum-config-manager --add-repo https://rpm.kamailio.org/centos/kamailio.repo 但目前这样其实行不通 需要这样做&#xff1a; yum install --disablerepokamailio --enablerepokamai…

Oracle 删除表中的列

Oracle 删除表中的列 CONN SCOTT/TIGER DROP TABLE T1; create table t1 as select * from emp; insert into t1 select * from t1; / / --到6000行&#xff0c;构造一个实验用大表T1。 COMMIT; select EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKS from dba_extents where SEGMENT_…

字典是如何实现的?Rehash 了解吗?

字典是 Redis 服务器中出现最为频繁的复合型数据结构。除了 hash 结构的数据会用到字典外&#xff0c;整个 Redis 数据库的所有 key 和 value 也组成了一个 全局字典&#xff0c;还有带过期时间的 key 也是一个字典。(存储在 RedisDb 数据结构中) 字典结构是什么样的呢&#xf…

AI 重塑产品设计

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【linux】linux工具使用

这一章完全可以和前两篇文件归类在一起&#xff0c;可以选择放一起看哦 http://t.csdnimg.cn/aNaAg http://t.csdnimg.cn/gkJx7 拖更好久了&#xff0c;抱歉&#xff0c;让我偷了会懒 1. 自动化构建工具 make , makefile make 是一个命令&#xff0c;makefile 是一个文件&…

C++笔记(体系结构与内核分析)

1.OOP面向对象编程 vs. GP泛型编程 OOP将data和method放在一起&#xff0c;目的是通过封装、继承、多态提高软件的可维护性和可扩展性GP将data和method分开&#xff0c;可以将任何容器与任何算法结合使用&#xff0c;只要容器满足塞饭所需的迭代器类型 2.算法与仿函数的区别 …

vue项目基于WebRTC实现一对一音视频通话

效果 前端代码 <template><div class"flex items-center flex-col text-center p-12 h-screen"><div class"relative h-full mb-4 fBox"><video id"localVideo"></video><video id"remoteVideo">…

C++STL初阶(1):string的使用及初阶原理

此文作为学习stl的笔记&#xff0c;许多普及、概念性的知识点将不再罗列&#xff08;如stl的发展、背景等&#xff09; 便于读者作为复习等方法了解。 0.STL简介&#xff08;笔记向&#xff09; STL不是祖师爷本贾尼实现的&#xff0c;是在惠普实验室中实现的。其作为一个数据结…

【强训笔记】day20

NO.1 思路&#xff1a;先判断能对砍几个回合&#xff0c;取最小值&#xff0c;因为回合数是整数&#xff0c;所以可能存在都大于0的情况&#xff0c;再判断一下如果都存活就再对砍一次&#xff0c;直到一家存活或者都死亡。 代码实现&#xff1a; #include<iostream>u…

51输出周期为40ms的方波(C+汇编)

题目 已知Fosc12MHz&#xff0c;T1工作于方式1&#xff0c; ①&#xff1a;实现20ms延时&#xff0c;求定时器初值TH0&#xff1f;TL0&#xff1f;写出具体的计算过程。 ②&#xff1a;利用汇编或C语言编程实现输出周期为40ms的方波。 周期为40ms的方波&#xff0c;半周期就…

落雪音乐 超好用的桌面端音乐播放器

之前一直都是充某Q音乐的会员&#xff0c;突然不想氪金了&#xff0c;终于找到一个开源的音乐播放器&#xff0c;在此先给落雪无痕大佬跪了 太爱了 简直白嫖怪的福音 话不多说&#xff0c;直接上操作&#xff1a;解压密码&#xff1a;www.1234f.com下载地址&#xff1a;极速云…

XYCTF - web

目录 warm up ezMake ezhttp ezmd5 牢牢记住&#xff0c;逝者为大 ezPOP 我是一个复读机 ezSerialize 第一关 第二关 第三关 第一种方法&#xff1a; 第二种方法&#xff1a; ez?Make 方法一&#xff1a;利用反弹shell 方法二&#xff1a;通过进制编码绕过 ε…

【SRC实战】无法支付的修改金额支付漏洞

挖个洞先 https://mp.weixin.qq.com/s/F4f8R4uKN0Q9BnTmjDMleg “ 以下漏洞均为实验靶场&#xff0c;如有雷同&#xff0c;纯属巧合 ” 01 — 漏洞证明 一、企业用户&#xff0c;标准商品 “ 支付订单需要公对公银行卡转账&#xff0c;如何绕过&#xff1f;” 1、点击任意…

电商购物系统首页的商品分类

如上图对商品的一个分类实际上和省市区的分类十分类似 , 都是通过自关联的方法来实现 , 但是这里不同的是 , 涉及到外键来获取数据 首先让我们来看一下最后通过后端返回数据的形式是什么样子的 """{1:{channels:[{id:1 , name:手机 , url:},{}{}],sub_cats:[{…