Android开发中通过手机号+短信验证码登录的实例代码
程序员文章站
2023-12-09 19:35:57
首先,需要一个电话号码,目前很多账户都是将账户名设置成手机号,然后点击按钮获取手机验证码。
其次,你需要后台给你手机短信的验证接口,各个公司用的不一样,这个身为前端...
首先,需要一个电话号码,目前很多账户都是将账户名设置成手机号,然后点击按钮获取手机验证码。
其次,你需要后台给你手机短信的验证接口,各个公司用的不一样,这个身为前端,不需要你来考虑,你只要让你后台给你写好接口,你直接调用就好了。
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开发中通过手机号+短信验证码登录的实例代码,希望对大家有所帮助