Android開發(fā)中通過手機(jī)號(hào)+短信驗(yàn)證碼登錄的實(shí)例代碼
首先,需要一個(gè)電話號(hào)碼,目前很多賬戶都是將賬戶名設(shè)置成手機(jī)號(hào),然后點(diǎn)擊按鈕獲取手機(jī)驗(yàn)證碼。
其次,你需要后臺(tái)給你手機(jī)短信的驗(yàn)證接口,各個(gè)公司用的不一樣,這個(gè)身為前端,不需要你來考慮,你只要讓你后臺(tái)給你寫好接口,你直接調(diào)用就好了。
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="請(qǐng)輸入您的手機(jī)號(hào)"
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="請(qǐng)輸入驗(yàn)證碼"
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="獲取驗(yàn)證碼"
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;//倒計(jì)時(shí)秒數(shù)
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 + ")后獲取驗(yàn)證碼");
mCountHandler.sendEmptyMessageDelayed(0, 1000);
} else {
countSeconds = 60;
getyanzhengma1.setText("請(qǐng)重新獲取驗(yàn)證碼");
}
}
};
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, "不能重復(fù)發(fā)送驗(yàn)證碼", Toast.LENGTH_SHORT).show();
}
break;
case R.id.login_btn:
login();
break;
default:
break;
}
}
//獲取信息進(jìn)行登錄
public void login() {
String mobile = mobile_login.getText().toString().trim();
String verifyCode = yanzhengma.getText().toString().trim();
RequestParams params = new RequestParams(“這里換成你的請(qǐng)求登錄的接口”);
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");
//我這里按照我的要求寫的,你們也可以適當(dāng)改動(dòng)
//獲取用戶信息的狀態(tài)
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() {
}
});
}
//獲取驗(yàn)證碼信息,判斷是否有手機(jī)號(hào)碼
private void getMobiile(String mobile) {
if ("".equals(mobile)) {
Log.e("tag", "mobile=" + mobile);
new AlertDialog.Builder(mContext).setTitle("提示").setMessage("手機(jī)號(hào)碼不能為空").setCancelable(true).show();
} else if (isMobileNO(mobile) == false) {
new AlertDialog.Builder(mContext).setTitle("提示").setMessage("請(qǐng)輸入正確的手機(jī)號(hào)碼").setCancelable(true).show();
} else {
Log.e("tag", "輸入了正確的手機(jī)號(hào)");
requestVerifyCode(mobile);
}
}
//獲取驗(yàn)證碼信息,進(jìn)行驗(yàn)證碼請(qǐng)求
private void requestVerifyCode(String mobile) {
RequestParams requestParams = new RequestParams(“這里是你請(qǐng)求的驗(yàn)證碼接口,讓后臺(tái)給你,參數(shù)什么的加在后面”);
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", "獲取驗(yàn)證碼==" + verifyCode);
if ("true".equals(state)) {
Toast.makeText(LoginActivity.this, verifyCode, Toast.LENGTH_SHORT).show();
startCountBack();//這里是用來進(jìn)行請(qǐng)求參數(shù)的
} 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() {
}
});
}
//使用正則表達(dá)式判斷電話號(hào)碼
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();
}
//獲取驗(yàn)證碼信息,進(jìn)行計(jì)時(shí)操作
private void startCountBack() {
((Activity) mContext).runOnUiThread(new Runnable() {
@Override
public void run() {
getyanzhengma1.setText(countSeconds + "");
mCountHandler.sendEmptyMessage(0);
}
});
}
}
以上所述是小編給大家介紹的Android開發(fā)中通過手機(jī)號(hào)+短信驗(yàn)證碼登錄的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android如何通過手機(jī)獲取驗(yàn)證碼來完成注冊(cè)功能
- Android開發(fā)工程中集成mob短信驗(yàn)證碼功能的方法
- Android實(shí)現(xiàn)短信驗(yàn)證碼獲取自動(dòng)填寫功能(詳細(xì)版)
- Android獲取和讀取短信驗(yàn)證碼的實(shí)現(xiàn)方法
- Android實(shí)現(xiàn)自動(dòng)提取短信驗(yàn)證碼功能
- Android實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫功能
- Android獲取短信驗(yàn)證碼的實(shí)現(xiàn)方法
- Android實(shí)現(xiàn)常見的驗(yàn)證碼輸入框?qū)嵗a
- Android自定義控件通用驗(yàn)證碼輸入框的實(shí)現(xiàn)
- Android實(shí)現(xiàn)隨機(jī)生成驗(yàn)證碼
相關(guān)文章
Android activity動(dòng)畫不生效原因及解決方案總結(jié)
android activity動(dòng)畫是一個(gè)比較簡(jiǎn)單的功能。但是使用時(shí)總會(huì)由于各種小問題導(dǎo)致動(dòng)畫失效,筆者根據(jù)自己經(jīng)驗(yàn),整理了各種可能導(dǎo)致的原因,期望能對(duì)你有所幫助2021-11-11
30分鐘搞清楚Android Touch事件分發(fā)機(jī)制
30分鐘搞清楚Android Touch事件分發(fā)機(jī)制,Touch事件分發(fā)中只有兩個(gè)主角:ViewGroup和View,想要深入學(xué)習(xí)的朋友可以參考本文2016-03-03
Android畢業(yè)設(shè)計(jì)記事本APP
這篇文章主要介紹了一個(gè)Android畢業(yè)設(shè)計(jì)記事本APP,它是一款輕量級(jí)的便簽工具,使用Java語(yǔ)言開發(fā),風(fēng)格簡(jiǎn)練,可實(shí)現(xiàn)便簽的添加、刪除、修改、查看功能2021-08-08
基于android中的各種顏色在drawable.xml中的值詳解
本篇文章是對(duì)在android中的各種顏色在drawable.xml中的值進(jìn)行了詳細(xì)的介紹。需要的朋友參考下2013-05-05
Android使用Handler實(shí)現(xiàn)定時(shí)器與倒計(jì)時(shí)器功能
Handler的最常見應(yīng)用場(chǎng)景之一便是通過Handler在子線程中間接更新UI。這篇文章主要介紹了Android使用Handler實(shí)現(xiàn)定時(shí)器與倒計(jì)時(shí)器功能,需要的朋友可以參考下2018-02-02

