Android实现验证码登录

本文实例为大家分享了Android实现验证码登录的具体代码,供大家参考,具体内容如下

结果展示

1.导包

1.1在项目的gradle中导入

maven { url "https://www.jitpack.io" }

1.2在model的gradle的dependencies导入

//XUI项目
implementation 'com.github.xuexiangjys:XUI:1.1.6'

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'com.github.bumptech.glide:glide:4.11.0'

1.3点击右上角的sync now

2.新建xml文件

phone_code.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:orientation="vertical"
 xmlns:app="http://schemas.android.com/apk/res-auto">

 <TextView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_marginLeft="30dp"
 android:layout_marginTop="50dp"
 android:textSize="25dp"
 android:textStyle="bold"
 android:text="请输入验证码"
 />
 <TextView
 android:id="@+id/phone_number_str"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:textSize="18dp"
 android:textColor="#000000"
 android:layout_marginLeft="30dp"
 android:layout_marginTop="5dp"
 />

 <com.xuexiang.xui.widget.edittext.verify.VerifyCodeEditText
 android:id="@+id/phone_code_input"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_marginLeft="10dp"
 android:layout_marginTop="26dp"
 android:layout_marginRight="10dp"
 app:vcet_is_pwd="false"
 app:vcet_number="6"
 app:vcet_pwd_radius="10dp"
 app:vcet_text_color="#000000"
 app:vcet_width="50dp" />

 <TextView
 android:id="@+id/re_get_code"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_marginTop="20dp"
 android:layout_marginLeft="30dp"
 android:textColor="#60000000"
 android:textSize="20dp"
 />

 <TextView
 android:id="@+id/get_code"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_marginTop="20dp"
 android:layout_marginLeft="30dp"
 android:textColor="#60000000"
 android:textSize="15dp"
 />

</LinearLayout>

3.修改Activity

MainActivity.java

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.TextView;

import androidx.annotation.Nullable;

import java.lang.reflect.Field;
import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 TextView phoneNumberStr;
 TextView codeCountDown;
 TextView reGetCode;
 private int recLen = 10;

 Timer timer = new Timer();
 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.phone_code);
 init();//初始化组件
 String phone = new String("15968373790");

 if (phone.length() < 11)
  phoneNumberStr.setText("验证码已发送至"+phone);
 else
  phoneNumberStr.setText("验证码已发送至"+phone.substring(0,3)+"****"+phone.substring(7));
 timer.schedule(task, 1000, 1000); // 启动一个1000毫秒(1秒)的定时任务

 }

 TimerTask task = new TimerTask() {
 @Override
 public void run() {

  runOnUiThread(new Runnable() {
  @Override
  public void run() {
   codeCountDown.setVisibility(View.VISIBLE);
   recLen--;
   codeCountDown.setText(recLen+"秒后重新获取验证码");//动态调整秒数下降
   if(recLen <= 0){
   timer.cancel();
   codeCountDown.setVisibility(View.GONE);
   reGetCode.setText("重新获得验证码");//倒计时结束,修改为重新获得验证码

   reGetCode.setVisibility(View.VISIBLE);//修改控件的可见性
   reGetCode.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    reGetCode.setVisibility(View.GONE);
    recLen = 10;
    codeCountDown.setVisibility(View.VISIBLE);
    codeCountDown.setText(recLen+"秒后重新获取验证码");
    timer = new Timer();
    //task一般情况下使用过一次后无法再使用,但可以借助反射使得task重新工作,修改state属性即可,state为1时表示已经使用过无法再次使用,为0表示可以使用
    Field field;
    try {
     field = TimerTask.class.getDeclaredField("state");
     field.setAccessible(true);
     field.set(task, 0);
    } catch (NoSuchFieldException e) {
     e.printStackTrace();
    } catch (Exception e) {
     e.printStackTrace();
    }
    timer.schedule(task, 1000, 1000);
    }
   });
   }
  }
  });
 }
 };

 private void init() {

 phoneNumberStr = findViewById(R.id.phone_number_str);
 codeCountDown = findViewById(R.id.re_get_code);
 reGetCode = findViewById(R.id.re_get_code);
 reGetCode.setOnClickListener(this);
 reGetCode.setVisibility(View.GONE);
 }

 @Override
 public void onClick(View v) {
 Intent intent;//设置单击事件使得倒计时可以继续
 switch (v.getId()){
  case R.id.get_code:
  reGetCode.setVisibility(View.GONE);
  timer.schedule(task, 1000, 1000); // timeTask
  break;
 }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android本地验证码的简易实现方法(防止暴力登录)

    0.  前言  验证码无处不在,有人问我,你知道达芬奇密码下面是什么吗,对,答案就是达芬奇验证码. 验证码一个最主要的作用就是防止恶意暴力破解登录,防止不间断的登录尝试,有人说其实可以在服务器端对该终端进行登录间隔检测,如果间隔太短可以展示拒绝的姿态.但是还是本地验证码作用更加实在,可以减轻服务器端的压力.这篇将使用自定义View来实现一个如下效果的简易本地验证码.算是对自定义View知识的复习吧. 1.  布局结构  <RelativeLayout xmlns:android="http

  • Android注册登录实时自动获取短信验证码

    android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码. 主要就是实时获取短信信息. android上获取短信信息主要有BroadcastReceiver方式与数据库方式,要实时的话就BroadcastReceiver比较方便,分享一篇文章大家可以查看一下,点击. public class SMSReceiver extends BroadcastReceiver{ private String ver

  • Android手机注册登录时获取验证码之后倒计时功能(知识点总结)

    app注册界面经常会遇到一个场景:手机注册,点击获取验证码,验证码发送成功之后,开始倒计时 具体代码如下所示: private TimerTask timerTask; private Timer timer; private int time = 5000;//五秒 private int timess; /** * 开始倒计时 */ private void startTimer() { timess = time/1000; tvTime.setText(timess+"S");

  • Android开发中通过手机号+短信验证码登录的实例代码

    首先,需要一个电话号码,目前很多账户都是将账户名设置成手机号,然后点击按钮获取手机验证码. 其次,你需要后台给你手机短信的验证接口,各个公司用的不一样,这个身为前端,不需要你来考虑,你只要让你后台给你写好接口,你直接调用就好了. activity_login.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.andr

  • Android实现验证码登录

    本文实例为大家分享了Android实现验证码登录的具体代码,供大家参考,具体内容如下 结果展示 1.导包 1.1在项目的gradle中导入 maven { url "https://www.jitpack.io" } 1.2在model的gradle的dependencies导入 //XUI项目 implementation 'com.github.xuexiangjys:XUI:1.1.6' implementation 'androidx.appcompat:appcompat:1

  • Android实现注册登录界面的实例代码

    本文讲述了在linux命令下导出导入.sql文件的方法.分享给大家供大家参考,具体如下: AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="online.geekgalaxy.layoutlearn

  • thinkPHP实现的验证码登录功能示例

    本文实例讲述了thinkPHP实现的验证码登录功能.分享给大家供大家参考,具体如下: 使用thinkphp自带的验证,实现登录页面的账号密码+验证码的验证 <?php namespace Admin\Controller; use Think\Controller; use Think\Verify; class LoginController extends Controller{ public function login(){ if($_POST){ $obj = new Verify()

  • Android 类似微信登录输入框效果

    微信的登录输入框效果如下 进入自动打开自动启动软键盘 点击下一个输入框,下划线颜色改变 怎么实现这样的效果呢,其实非常简单! 简单的布局我就不说了,直接上干货. 1.实现进入自动弹出软键盘,在根文件中的Activity中设置 windowSoftInputMode 属性为 stateVisible|adjustResize 例如 <activity android:name=".SetLoginPasswordActivity" android:windowSoftInputMo

  • 通过Session案例分析一次性验证码登录

    验证码的实现原理: 在一个Servlet中生成验证,并把验证码上的数据保存在Session,用户提交验证码之后,会提交给另外一个Servlet程序.在获取用户提交数据的Servlet中的从Session中把验证码取出,在取出的同时从Session中把验证码删除. 1.注册页面:register.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

  • Android实现第三方登录的上拉展开,下拉隐藏,下拉隐藏示例

    Android的UI和交互是很重要的一部分,直接影响到用户对软件的体验.随着项目经验的积累,发现Android中动画的运用越来越重要.本篇文章抽出了项目登录界面中实现的第三方登录,用户可以上拉展开,下拉隐藏第三方登录这么一个效果,提高用户和软件的交互性. 实现效果: (1)activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q

  • Android应用退出登录的实现方法

    每一个app都会有一个"退出登陆"的功能,当点击退出之后需要将所有的Activity都finish掉,开始是想将栈中的所有Activity清除掉,但是没有找到方法,后来用广播实现了 核心思想 当点击登陆的时候发送一个广播,然后在你的BaseActivity里面手动注册一个广播,当收到广播后finish,这样所有继承这个Base的Activity就都finish了, 主要代码 点击退出登录:发送广播 Intent intent = new Intent(); intent.setActi

随机推荐