Android开发中通过手机号+短信验证码登录的实例代码
作者:ganchuanpu 发布时间:2023-03-10 10:57:13
标签:android,验证码,登录
首先,需要一个电话号码,目前很多账户都是将账户名设置成手机号,然后点击按钮获取手机验证码。
其次,你需要后台给你手机短信的验证接口,各个公司用的不一样,这个身为前端,不需要你来考虑,你只要让你后台给你写好接口,你直接调用就好了。
activity_login.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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="20dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:gravity="center"
android:orientation="horizontal">
<EditText
android:id="@+id/mobile_login"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginLeft="10dp"
android:hint="请输入您的手机号"
android:textSize="16sp"
android:background="@null"
android:inputType="number"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="15dp"
android:gravity="center"
android:orientation="horizontal">
<EditText
android:id="@+id/yanzhengma"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="4"
android:background="@null"
android:layout_marginLeft="10dp"
android:hint="请输入验证码"
android:textSize="16sp"
android:inputType="number"
/>
<Button
android:id="@+id/getyanzhengma1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.9"
android:textSize="13sp"
android:gravity="center"
android:text="获取验证码"
android:layout_gravity="center"
/>
</LinearLayout>
<Button
android:id="@+id/login_btn"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:text="登录"
android:textSize="16sp"
/>
</LinearLayout>
LoginActivity.java
public class LoginActivity extends Activity implements View.OnClickListener {
private int countSeconds = 60;//倒计时秒数
private EditText mobile_login, yanzhengma;
private Button getyanzhengma1, login_btn;
private Context mContext;
private String usersuccess;
private Handler mCountHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (countSeconds > 0) {
--countSeconds;
getyanzhengma1.setText("(" + countSeconds + ")后获取验证码");
mCountHandler.sendEmptyMessageDelayed(0, 1000);
} else {
countSeconds = 60;
getyanzhengma1.setText("请重新获取验证码");
}
}
};
private String userinfomsg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
setContentView(R.layout.activity_login);
initView();
initEvent();
initData();
}
private void initView() {
mobile_login = (EditText) findViewById(R.id.mobile_login);
getyanzhengma1 = (Button) findViewById(R.id.getyanzhengma1);
yanzhengma = (EditText) findViewById(R.id.yanzhengma);
login_btn = (Button) findViewById(R.id.login_btn);
}
private void initEvent() {
getyanzhengma1.setOnClickListener(this);
login_btn.setOnClickListener(this);
}
private void initData() {
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.getyanzhengma1:
if (countSeconds == 60) {
String mobile = mobile_login.getText().toString();
Log.e("tag", "mobile==" + mobile);
getMobiile(mobile);
} else {
Toast.makeText(LoginActivity.this, "不能重复发送验证码", Toast.LENGTH_SHORT).show();
}
break;
case R.id.login_btn:
login();
break;
default:
break;
}
}
//获取信息进行登录
public void login() {
String mobile = mobile_login.getText().toString().trim();
String verifyCode = yanzhengma.getText().toString().trim();
RequestParams params = new RequestParams(“这里换成你的请求登录的接口”);
x.http().post(params, new Callback.ProgressCallback<String>() {
@Override
public void onWaiting() {
}
@Override
public void onStarted() {
}
@Override
public void onLoading(long total, long current, boolean isDownloading) {
}
@Override
public void onSuccess(String result) {
try {
JSONObject jsonObject = new JSONObject(result);
Log.e("tag", "登陆的result=" + jsonObject);
String success = jsonObject.optString("success");
String data = jsonObject.optString("data");
String msg=jsonObject.optString("msg");
if ("true".equals(success)) {
Log.e("tag","登陆的data="+data);
JSONObject json = new JSONObject(data);
token = json.optString("token");
userId = json.optString("userId");
//我这里按照我的要求写的,你们也可以适当改动
//获取用户信息的状态
getUserInfo();
}else{
Toast.makeText(LoginActivity.this, msg, Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
//获取验证码信息,判断是否有手机号码
private void getMobiile(String mobile) {
if ("".equals(mobile)) {
Log.e("tag", "mobile=" + mobile);
new AlertDialog.Builder(mContext).setTitle("提示").setMessage("手机号码不能为空").setCancelable(true).show();
} else if (isMobileNO(mobile) == false) {
new AlertDialog.Builder(mContext).setTitle("提示").setMessage("请输入正确的手机号码").setCancelable(true).show();
} else {
Log.e("tag", "输入了正确的手机号");
requestVerifyCode(mobile);
}
}
//获取验证码信息,进行验证码请求
private void requestVerifyCode(String mobile) {
RequestParams requestParams = new RequestParams(“这里是你请求的验证码接口,让后台给你,参数什么的加在后面”);
x.http().post(requestParams, new Callback.ProgressCallback<String>() {
@Override
public void onWaiting() {
}
@Override
public void onStarted() {
}
@Override
public void onLoading(long total, long current, boolean isDownloading) {
}
@Override
public void onSuccess(String result) {
try {
JSONObject jsonObject2 = new JSONObject(result);
Log.e("tag", "jsonObject2" + jsonObject2);
String state = jsonObject2.getString("success");
String verifyCode = jsonObject2.getString("msg");
Log.e("tag", "获取验证码==" + verifyCode);
if ("true".equals(state)) {
Toast.makeText(LoginActivity.this, verifyCode, Toast.LENGTH_SHORT).show();
startCountBack();//这里是用来进行请求参数的
} else {
Toast.makeText(LoginActivity.this, verifyCode, Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
ex.printStackTrace();
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
//使用正则表达式判断电话号码
public static boolean isMobileNO(String tel) {
Pattern p = Pattern.compile("^(13[0-9]|15([0-3]|[5-9])|14[5,7,9]|17[1,3,5,6,7,8]|18[0-9])\\d{8}$");
Matcher m = p.matcher(tel);
System.out.println(m.matches() + "---");
return m.matches();
}
//获取验证码信息,进行计时操作
private void startCountBack() {
((Activity) mContext).runOnUiThread(new Runnable() {
@Override
public void run() {
getyanzhengma1.setText(countSeconds + "");
mCountHandler.sendEmptyMessage(0);
}
});
}
}
以上所述是小编给大家介绍的Android开发中通过手机号+短信验证码登录的实例代码网站的支持!
0
投稿
猜你喜欢
- 缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度,同时可以减少对特定资源访问的压力。本文主要针对自己在Winform方
- 一、什么是模板方法设计模式从字面意义上理解, 模板方法就是定义出来一套方法, 作为模板, 也就是基础。 在这个基础上, 我们可以进行加工,实
- 本文实例讲述了Java使用synchronized实现互斥锁功能。分享给大家供大家参考,具体如下:代码package per.thread;
- java 中http请求为了防止乱码解决方案今天做一个与地图有关的项目,需要发起http请求地图数据 写了一个工具类,希望大家都能用上吧pa
- 前言本文尝试从What、Why、How这三个角度来探索Java中的弱引用,帮助大家理解Java中弱引用的定义、基本使用场景和使用方法。一、&
- public class CrossSum{ public static void main(String args[]){
- 这一定是困扰刚开始使用idea工具同学的一个大问题。三种情况会导致这种问题出现。1、你不小心按了键盘上的insert按键解决:再按一次吧2、
- 一、@ConditionalOnClass() Spring中存在指定class对象时,注入指定配置和ConditionalOnBean()
- SpringBoot自带Tomcat,所以我们的项目可以单独部署,不需要依赖Window、Linux系统中的服务器,所以打包出来的Jar包是
- Java的常量池通常分为两种:静态常量池和运行时常量池静态常量池:class文件中的常量池,class文件中的常量池包括了字符串(数字)字面
- 对象持久化是指将内存中的对象保存到可永久保存的存储设备中(如磁盘)的一种技术。本文介绍的是除数据库之外的几种对象持久化方式。具体如下:保存成
- 本文所述为C#新手常犯的错误,但是实际上很多有经验的程序员也经常犯这些错误,对此特别整理了一下,供大家参考。具体如下:1、遍历List的错误
- 本文实例讲述了WinForm调用jar包的方法。分享给大家供大家参考,具体如下:因为工作需要,需要做一个数据上传的程序,客户规定的是:数据接
- WebService服务端代码public class WebServiceDemo : System.Web.Services.WebSe
- private void txtBarCode_KeyPress(object sender, KeyPressEventArg
- 创建maven web项目有两种方式,一种是使用骨架方式,一种是不使用骨架的方式创建方式一、使用骨架的方式1.打开idea,按照步骤创建一个
- 定义在一幅无向图G=(V,E) 中,(u,v) 为连接顶点u和顶点v的边,w(u,v)为边的权重,若存在边的子集T&am
- 一.模拟问题最近在公司遇到一个问题,挂号系统是做的集群,比如启动了两个相同的服务,病人挂号的时候可能会出现同号的情况,比如两个病人挂出来的号
- 原因如下: Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的
- 目录一、二叉树的顺序存储1.堆的存储方式2.下标关系二、堆(heap)1.概念2.大/小 根堆2.1小根堆2.2大根堆3.建堆操作3.1向下