热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

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

最近在开发一个android的项目,需要通过获取手机验证码来完成登录功能,接下来通过实例代码给大家分享手机号+短信验证码登录的实现方法,需要的的朋友参考下吧

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

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

activity_login.xml

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
    
  
  
    
    

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() {
      @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() {
      @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开发中通过手机号+短信验证码登录的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文是关于自学Android的笔记,包括查看类的源码的方法,活动注册的必要性以及布局练习的重要性。通过学习本文,读者可以了解到在自学Android过程中的一些关键点和注意事项。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
author-avatar
唲戲2502873263
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有