MainActivity
package com.example.yanzhengmademo;

import .AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.example.DBHelper.UserDBHelper;
import com.example.Dao.UserDao;
import java.util.HashMap;

import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
import cn.smssdk.gui.RegisterPage;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    public EventHandler eventHandler;
    private Button bt_username_clear;
    private Button bt_pwd_clear;
    private TextWatcher username_watcher;
    private TextWatcher password_watcher;
    private EditText et_name;
    private EditText et_pass;
    private Button button_pass,bt_forget_password,register;
    private UserDao dao;
    private Cursor cursor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


//        调用初始化方法
        init();
//          调用输入框clear方法
        initWatcher();
        et_name.addTextChangedListener(username_watcher);
        et_pass.addTextChangedListener(password_watcher);
        //        调用点击事件
        bt_username_clear.setOnClickListener(this);
        bt_pwd_clear.setOnClickListener(this);
        button_pass.setOnClickListener(this);
        bt_forget_password.setOnClickListener(this);
        register.setOnClickListener(this);
        dao= new UserDao(new UserDBHelper(this));
    }


    public void init(){
        bt_username_clear = (Button) findViewById(.bt_username_clear);
        bt_pwd_clear = (Button) findViewById(.bt_pwd_clear);
        et_name = (EditText) findViewById(.username);
        et_pass = (EditText) findViewById(.password);
        button_pass = (Button) findViewById(.pass);
        bt_forget_password = (Button) findViewById(.bt_forget_password);
        register = (Button) findViewById(.register);
    }



    //  定义输入框clear显示事件
    private void initWatcher() {
        username_watcher = new TextWatcher() {

            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            public void afterTextChanged(Editable s) {
                et_pass.setText("");
                if (s.toString().length() > 0) {
                    bt_username_clear.setVisibility(View.VISIBLE);
                } else {
                    bt_username_clear.setVisibility(View.INVISIBLE);
                }
            }
        };
        password_watcher = new TextWatcher() {

            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            public void afterTextChanged(Editable s) {
                if (s.toString().length() > 0) {
                    bt_pwd_clear.setVisibility(View.VISIBLE);
                } else {
                    bt_pwd_clear.setVisibility(View.INVISIBLE);
                }
            }
        };
    }


    //      为clear添加点击事件

    public void onClick(View v) {
        switch (v.getId()){
//            clear
            case .bt_username_clear:
                et_name.setText("");
                break;
            case .bt_pwd_clear:
                et_pass.setText("");
                break;
//            pass
            case .pass:
                Intent Main =getIntent();

                String userName = et_name.getText().toString();
                String passWord = et_pass.getText().toString();
                cursor = dao.findUser(userName);
                if (!cursor.moveToFirst()) {
                    Toast.makeText(this, "账号不存在!", Toast.LENGTH_SHORT).show();
                }
                else {
                    if (passWord.equals(cursor.getString(cursor.getColumnIndex("_password")))) {
                        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                        startActivity(intent);
                    }
                    else {
                        Toast.makeText(this, "密码错误!", Toast.LENGTH_SHORT).show();
                    }

                }
                break;
//            bt_forget_password
            case .bt_forget_password:
                Intent intent_forget= new Intent(MainActivity.this,Forget_password_Activity.class);
                startActivity(intent_forget);
                finish();
                break;
//            register
            case .register:
                Intent intent_register = new Intent(MainActivity.this,RegisterActivity.class);
                startActivity(intent_register);
                finish();
                break;
        }
    }
    public  void hidesendCode(){
        SMSSDK.setAskPermisionOnReadContact(true);
        eventHandler = new EventHandler() {
            public void afterEvent(int event, int result, Object data) {
                // afterEvent会在子线程被调用,因此如果后续有UI相关操作,需要将数据发送到UI线程
                Message msg = new Message();
                msg.arg1 = event;
                msg.arg2 = result;
                msg.obj = data;
                new Handler(Looper.getMainLooper(), new Handler.Callback() {
                    @Override
                    public boolean handleMessage(Message msg) {
                        int event = msg.arg1;
                        int result = msg.arg2;
                        Object data = msg.obj;
                        if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                            if (result == SMSSDK.RESULT_COMPLETE) {
                                // TODO 处理成功得到验证码的结果
                                // 请注意,此时只是完成了发送验证码的请求,验证码短信还需要几秒钟之后才送达
                            } else {
                                // TODO 处理错误的结果

                                ((Throwable) data).printStackTrace();
                            }
                        } else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                            if (result == SMSSDK.RESULT_COMPLETE) {
                                // TODO 处理验证码验证通过的结果
                                String s = Integer.toString(result);
                                Log.e("a=",s);
                            } else {
                                // TODO 处理错误的结果
                                String s = Integer.toString(result);
                                Log.e("b=",s);
                                ((Throwable) data).printStackTrace();
                            }
                        }
                        // TODO 其他接口的返回结果也类似,根据event判断当前数据属于哪个接口
                        return false;
                    }
                }).sendMessage(msg);
            }
        };
// 注册一个事件回调,用于处理SMSSDK接口请求的结果
        SMSSDK.registerEventHandler(eventHandler);
// 请求验证码,其中country表示国家代码,如“86”;phone表示手机号码,如“13800138000”

    }
    protected void onDestroy() {
        super.onDestroy();
        SMSSDK.unregisterEventHandler(eventHandler);
    }
    public void sendCode(Context context) {
        RegisterPage page = new RegisterPage();
        //如果使用我们的ui,没有申请模板编号的情况下需传null
        page.setTempCode(null);
        page.setRegisterCallback(new EventHandler() {
            public void afterEvent(int event, int result, Object data) {
                if (result == SMSSDK.RESULT_COMPLETE) {
                    // 处理成功的结果
                    HashMap<String,Object> phoneMap = (HashMap<String, Object>) data;
                   String country = (String) phoneMap.get("country"); // 国家代码,如“86”
                    String phone = (String) phoneMap.get("phone"); // 手机号码,如“13800138000”
                    // TODO 利用国家代码和手机号码进行后续的操作
                    Log.e("countrt=",country);
                    Log.e("phone=",phone);
                } else{
                    // TODO 处理错误的结果
                }
            }
        });
        page.show(context);
    }
}
RegisterActivity
package com.example.yanzhengmademo;

import .AppCompatActivity;

import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

import com.example.DBHelper.UserDBHelper;
import com.example.Dao.UserDao;
import com.example.TheClass.User;
import com.mob.MobSDK;

import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;

import static com.mob.tools.utils.ResHelper.getStringRes;

public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {

    //    定义变量
    private EditText et_register_username;
    private EditText et_register_password;
    private EditText phone;
    private EditText cord;
    private TextView now;
    private Button getCord;
    private Button saveCord;
    private String iPhone;
    private String iCord;
    private int time = 60;
    private boolean flag = true;
    public EventHandler eventHandler;
    private RadioGroup group;
    private RadioButton button1;
    private RadioButton button2;
    private UserDao dao;
    private Cursor cursor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        dao = new UserDao(new UserDBHelper(this));
//      初始化
        init();
        MobSDK.init(this);
        hidesendCode();

    }

    //    初始化事件
    private void init() {
        phone = (EditText) findViewById(.phone);
        cord = (EditText) findViewById(.cord);
        now = (TextView) findViewById(.now);
        getCord = (Button) findViewById(.getcord);
        saveCord = (Button) findViewById(.savecord);
        getCord.setOnClickListener(this);
        saveCord.setOnClickListener(this);
        et_register_username = (EditText) findViewById(.et_register_username);
        et_register_password = (EditText) findViewById(.et_register_password);
        button1 = (RadioButton) findViewById(.rb_student_female);
        button2 = (RadioButton) findViewById(.rb_teacher_male);
        group = (RadioGroup) findViewById(.rg_kind);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case .getcord:
                if (CheckUIInput()) {
                        iPhone = phone.getText().toString().trim();
                        SMSSDK.getVerificationCode("86", iPhone);
                        cord.requestFocus();
                        getCord.setVisibility(View.GONE);
                }
                break;

            case .savecord: if (!TextUtils.isEmpty(cord.getText().toString().trim())) {
                if (cord.getText().toString().trim().length() == 4) {
                    iCord = cord.getText().toString().trim();
                    SMSSDK.submitVerificationCode("86", iPhone, iCord);
                    flag = false;


                } else {
                    Toast.makeText(RegisterActivity.this, "请输入完整验证码", Toast.LENGTH_LONG).show();
                    cord.requestFocus();
                }
            } else {
                Toast.makeText(RegisterActivity.this, "请输入验证码", Toast.LENGTH_LONG).show();
                cord.requestFocus();
            }
                break;
            default:
                break;
        }
    }

    //      收集界面输入的数据,并将封装成Student对象
    private User getUserFromUI() {
        String username = et_register_username.getText().toString();
        String password = et_register_password.getText().toString();
        String kind = ((RadioButton) findViewById(group.getCheckedRadioButtonId())).getText().toString();
        User s=new User(username,password,kind);
        return s;
    }
    private  boolean CheckUIInput(){
        String username = et_register_username.getText().toString();
        String password = et_register_password.getText().toString();
        String phonenumber =phone.getText().toString();
        int id=group.getCheckedRadioButtonId();
        String message = null;
        View invadView = null;
        cursor = dao.findUser(username);
        if (id == -1) {
            message = "请选择身份!";

        } else if (username.trim().length() == 0) {
            message = "请输入用户名!";
            invadView = et_register_username;
        }else if (cursor.moveToFirst()){
            message = "用户名已存在,请重新输入!";
            et_register_username.setText("");
            invadView = et_register_username;
        }
        else if (password.trim().length() == 0) {
            message = "请输入密码!";
            invadView = et_register_password;
        }else  if (phonenumber.trim().length()==0){
            message = "请输入电话!";
            invadView = phone;
        }else  if (phonenumber.trim().length()!=11) {
            message = "请输入完整电话!";
            invadView = phone;
        }
        if (message != null) {
            Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
            if (invadView != null)
                invadView.requestFocus();
            return false;
        }
        return true;

    }



    Handler handlerText =new Handler(){
        public void handleMessage(Message msg) {
            if(msg.what==1){
                if(time>0){
                    now.setText("验证码已发送"+time+"秒");
                    time--;
                    handlerText.sendEmptyMessageDelayed(1, 1000);
                }else{
                    now.setText("提示信息");
                    time = 60;
                    now.setVisibility(View.GONE);
                    getCord.setVisibility(View.VISIBLE);
                }
            }else{
                cord.setText("");
                now.setText("提示信息");
                time = 60;
                now.setVisibility(View.GONE);
                getCord.setVisibility(View.VISIBLE);
            }
        };
    };
    //验证码送成功后提示文字
    private void reminderText() {
        now.setVisibility(View.VISIBLE);
        handlerText.sendEmptyMessageDelayed(1, 1000);
    }
    public  void hidesendCode(){
        SMSSDK.setAskPermisionOnReadContact(true);
        eventHandler = new EventHandler() {
            public void afterEvent(int event, int result, Object data) {
                // afterEvent会在子线程被调用,因此如果后续有UI相关操作,需要将数据发送到UI线程
                Message msg = new Message();
                msg.arg1 = event;
                msg.arg2 = result;
                msg.obj = data;
                new Handler(Looper.getMainLooper(), new Handler.Callback() {
                    @Override
                    public boolean handleMessage(Message msg) {
                        int event = msg.arg1;
                        int result = msg.arg2;
                        Object data = msg.obj;
                        if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                            if (result == SMSSDK.RESULT_COMPLETE) {
                                // TODO 处理成功得到验证码的结果
                                // 请注意,此时只是完成了发送验证码的请求,验证码短信还需要几秒钟之后才送达
                                reminderText();
                                Toast.makeText(getApplicationContext(), "验证码已经发送", Toast.LENGTH_SHORT).show();
                            } else {
                                // TODO 处理错误的结果

                                ((Throwable) data).printStackTrace();
                            }
                        } else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                            if (result == SMSSDK.RESULT_COMPLETE) {
                                Toast.makeText(getApplicationContext(), "验证码校验成功", Toast.LENGTH_SHORT).show();

                                /*读入数据*/
                                User user =getUserFromUI();
                                long id =dao.addUser(user);
                                dao.closeDB();
                                if (id > 0) {
                                    Toast.makeText(getApplicationContext(), "注册成功" ,Toast.LENGTH_SHORT).show();
                                } else {
                                    Toast.makeText(getApplicationContext(), "注册失败", Toast.LENGTH_SHORT).show();
                                }
                                /*页面跳转*/
                                Intent intent = new Intent(RegisterActivity.this,MainActivity.class);
                                startActivity(intent);
                                handlerText.sendEmptyMessage(2);
                                finish();
                            } else {
                                if(!flag)
                                {
                                    ((Throwable) data).printStackTrace();
                                    int resId = getStringRes(RegisterActivity.this, "smssdk_network_error");
                                    Toast.makeText(RegisterActivity.this, "验证码错误", Toast.LENGTH_SHORT).show();
                                    cord.selectAll();
                                    if (resId > 0) {
                                        Toast.makeText(RegisterActivity.this, resId, Toast.LENGTH_SHORT).show();
                                    }
                                }
                            }
                        }
                        // TODO 其他接口的返回结果也类似,根据event判断当前数据属于哪个接口
                        return false;
                    }
                }).sendMessage(msg);
            }
        };
// 注册一个事件回调,用于处理SMSSDK接口请求的结果
        SMSSDK.registerEventHandler(eventHandler);
// 请求验证码,其中country表示国家代码,如“86”;phone表示手机号码,如“13800138000”

    }
    protected void onDestroy() {
        super.onDestroy();
        SMSSDK.unregisterEventHandler(eventHandler);
    }


}
Forget_password_Activity
package com.example.yanzhengmademo;

import .AppCompatActivity;

import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;

import com.example.DBHelper.UserDBHelper;
import com.example.Dao.UserDao;
import com.example.TheClass.User;
import com.mob.MobSDK;

import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;

import static com.mob.tools.utils.ResHelper.getStringRes;

public class Forget_password_Activity extends AppCompatActivity implements View.OnClickListener {

    //    定义变量
    private EditText et_register_username;
    private EditText et_register_password;
    private EditText phone;
    private EditText cord;
    private TextView now;
    private Button getCord;
    private Button saveCord;
    private String iPhone;
    private String iCord;
    private int time = 60;
    private boolean flag = true;
    public EventHandler eventHandler;
    private UserDao dao;
    private Cursor cursor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_forgetpass);
        dao = new UserDao(new UserDBHelper(this));
//      初始化
        init();
        MobSDK.init(this);
        hidesendCode();

    }

    //    初始化事件
    private void init() {
        phone = (EditText) findViewById(.phone1);
        cord = (EditText) findViewById(.cord1);
        now = (TextView) findViewById(.now1);
        getCord = (Button) findViewById(.getcord1);
        saveCord = (Button) findViewById(.savecord1);
        getCord.setOnClickListener(this);
        saveCord.setOnClickListener(this);
        et_register_username = (EditText) findViewById(.et_forget_username);
        et_register_password = (EditText) findViewById(.et_forget_password);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case .getcord1:
                if (CheckUIInput()) {
                        iPhone = phone.getText().toString().trim();
                        SMSSDK.getVerificationCode("86", iPhone);
                        cord.requestFocus();
                        getCord.setVisibility(View.GONE);
                }
                break;

            case .savecord1: if (!TextUtils.isEmpty(cord.getText().toString().trim())) {
                if (cord.getText().toString().trim().length() == 4) {
                    iCord = cord.getText().toString().trim();
                    SMSSDK.submitVerificationCode("86", iPhone, iCord);
                    flag = false;

                } else {
                    Toast.makeText(Forget_password_Activity.this, "请输入完整验证码", Toast.LENGTH_LONG).show();
                    cord.requestFocus();
                }
            } else {
                Toast.makeText(Forget_password_Activity.this, "请输入验证码", Toast.LENGTH_LONG).show();
                cord.requestFocus();
            }
                break;
            default:
                break;
        }
    }


    //      收集界面输入的数据,并将封装成Student对象
    private User getUserFromUI() {
        String username = et_register_username.getText().toString();
        String password = et_register_password.getText().toString();
        User s=new User(username,password);
        return s;
    }

    private  boolean CheckUIInput(){
        String username = et_register_username.getText().toString();
        String password = et_register_password.getText().toString();
        String phonenumber =phone.getText().toString();
        String message = null;
        View invadView = null;
        cursor = dao.findUser(username);
         if (username.trim().length() == 0) {
            message = "请输入用户名!";
            invadView = et_register_username;
        }else if (!cursor.moveToFirst()){
            message = "用户名不存在,请重新输入!";
            et_register_username.setText("");
            invadView = et_register_username;
        }
        else if (password.trim().length() == 0) {
            message = "请输入新密码!";
            invadView = et_register_password;
        }else  if (phonenumber.trim().length()==0){
            message = "请输入电话!";
            invadView = phone;
        }else  if (phonenumber.trim().length()!=11) {
            message = "请输入完整电话!";
            invadView = phone;
        }
        if (message != null) {
            Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
            if (invadView != null)
                invadView.requestFocus();
            return false;
        }
        return true;

    }


    Handler handlerText =new Handler(){
        public void handleMessage(Message msg) {
            if(msg.what==1){
                if(time>0){
                    now.setText("验证码已发送"+time+"秒");
                    time--;
                    handlerText.sendEmptyMessageDelayed(1, 1000);
                }else{
                    now.setText("提示信息");
                    time = 60;
                    now.setVisibility(View.GONE);
                    getCord.setVisibility(View.VISIBLE);
                }
            }else{
                cord.setText("");
                now.setText("提示信息");
                time = 60;
                now.setVisibility(View.GONE);
                getCord.setVisibility(View.VISIBLE);
            }
        };
    };
    //验证码送成功后提示文字
    private void reminderText() {
        now.setVisibility(View.VISIBLE);
        handlerText.sendEmptyMessageDelayed(1, 1000);
    }
    public  void hidesendCode(){
        SMSSDK.setAskPermisionOnReadContact(true);
        eventHandler = new EventHandler() {
            public void afterEvent(int event, int result, Object data) {
                // afterEvent会在子线程被调用,因此如果后续有UI相关操作,需要将数据发送到UI线程
                Message msg = new Message();
                msg.arg1 = event;
                msg.arg2 = result;
                msg.obj = data;
                new Handler(Looper.getMainLooper(), new Handler.Callback() {
                    @Override
                    public boolean handleMessage(Message msg) {
                        int event = msg.arg1;
                        int result = msg.arg2;
                        Object data = msg.obj;
                        if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                            if (result == SMSSDK.RESULT_COMPLETE) {
                                // TODO 处理成功得到验证码的结果
                                // 请注意,此时只是完成了发送验证码的请求,验证码短信还需要几秒钟之后才送达
                                reminderText();
                                Toast.makeText(getApplicationContext(), "验证码已经发送", Toast.LENGTH_SHORT).show();
                            } else {
                                // TODO 处理错误的结果

                                ((Throwable) data).printStackTrace();
                            }
                        } else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                            if (result == SMSSDK.RESULT_COMPLETE) {
                                Toast.makeText(getApplicationContext(), "验证码校验成功", Toast.LENGTH_SHORT).show();

                                /*修改数据*/
                                User user =getUserFromUI();
                                int id =dao.updateUser(user);
                                dao.closeDB();
                                if (id > 0) {
                                    Toast.makeText(getApplicationContext(), "重置成功" ,Toast.LENGTH_SHORT).show();
                                } else {
                                    Toast.makeText(getApplicationContext(), "重置失败", Toast.LENGTH_SHORT).show();
                                }
                                /*页面跳转*/


                                Intent intent = new Intent(Forget_password_Activity.this,MainActivity.class);
                                startActivity(intent);
                                handlerText.sendEmptyMessage(2);
                                finish();
                            } else {
                                if(!flag)
                                {
                                    ((Throwable) data).printStackTrace();
                                    int resId = getStringRes(Forget_password_Activity.this, "smssdk_network_error");
                                    Toast.makeText(Forget_password_Activity.this, "验证码错误", Toast.LENGTH_SHORT).show();
                                    cord.selectAll();
                                    if (resId > 0) {
                                        Toast.makeText(Forget_password_Activity.this, resId, Toast.LENGTH_SHORT).show();
                                    }
                                }
                            }
                        }
                        // TODO 其他接口的返回结果也类似,根据event判断当前数据属于哪个接口
                        return false;
                    }
                }).sendMessage(msg);
            }
        };
// 注册一个事件回调,用于处理SMSSDK接口请求的结果
        SMSSDK.registerEventHandler(eventHandler);
// 请求验证码,其中country表示国家代码,如“86”;phone表示手机号码,如“13800138000”

    }
    protected void onDestroy() {
        super.onDestroy();
        SMSSDK.unregisterEventHandler(eventHandler);
    }


}