欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-11-24 12:16:52
首先,需要一个电话号码,目前很多账户都是将账户名设置成手机号,然后点击按钮获取手机验证码。 其次,你需要后台给你手机短信的验证接口,各个公司用的不一样,这个身为前端...

首先,需要一个电话号码,目前很多账户都是将账户名设置成手机号,然后点击按钮获取手机验证码。

其次,你需要后台给你手机短信的验证接口,各个公司用的不一样,这个身为前端,不需要你来考虑,你只要让你后台给你写好接口,你直接调用就好了。

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开发中通过手机号+短信验证码登录的实例代码,希望对大家有所帮助