GItHub源码 https://github.com/LGQ1001/Regist
1.导包
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.google.code.gson:gson:2.8.5'
2.依赖
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
3.注册布局页面activity_regist.xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/mobile_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入手机号"/>
<EditText
android:id="@+id/pwd_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入密码"/>
<TextView
android:onClick="register"
android:text="注册"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
4.开写代码部分
5.Api
public class Api {
//第一步注册接口
public final static String BASE_URL = "http://www.zhaoapi.cn/";
public final static String LOGIN_URL = BASE_URL+"user/login";
public final static String REG_URL = BASE_URL+"user/reg";
}
6.UserBean
public class UserBean {
public String msg;
public String code;
}
7.RegisterModel
public class RegisterModel {
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
//请求网络数据,请求接口注册
public void register(String mobile, String pwd, final RegCallback regCallback) {
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.build();
FormBody formBody = new FormBody.Builder()
.add("mobile",mobile)
.add("password",pwd).build();
Request request = new Request.Builder()
.url(Api.REG_URL).post(formBody).build();
//异步请求
okHttpClient.newCall(request).enqueue(new Callback() {
//请求失败
@Override
public void onFailure(Call call, IOException e) {
if (regCallback!=null){
regCallback.failure("请求失败");
}
}
//请求成功
@Override
public void onResponse(Call call, Response response) throws IOException {
//得到响应体json串,解析,切换线程,回调给presenter
if (response.code() == 200){
String result = response.body().string();
parsejsonResult(result,regCallback);
}
}
});
}
//解析json为bean对象
private void parsejsonResult(String result, final RegCallback regCallback) {
if (result!=null){
final UserBean userBean = new Gson().fromJson(result,UserBean.class);
//切换线程
handler.post(new Runnable() {
@Override
public void run() {
//运行在主线程
if (regCallback!=null){
regCallback.success(userBean);
}
}
});
}
}
//回调接口
public interface RegCallback{
void failure(String errorMsg);
void success(UserBean userBean);
}
}
8.RegisterPresenter
public class RegisterPresenter {
private RegisterModel registerModel;
private IRegistView iRegistView;
public RegisterPresenter(IRegistView iRegistView){
this.iRegistView =iRegistView;
this.registerModel = new RegisterModel();
}
//注册逻辑
public void register(String mobile, String pwd) {
//将验证传过来判断手机号合法
if (!RegexValidateUtil.checkCellphone(mobile)){
iRegistView.mobileVerify();
return;
}
//非空验证
if (TextUtils.isEmpty(mobile)){
iRegistView.mobileEmpty();
return;
}
if (TextUtils.isEmpty(pwd)){
iRegistView.pwdVerify();
return;
}
//请求数据
registerModel.register(mobile, pwd, new RegisterModel.RegCallback() {
@Override
public void failure(String errorMsg) {
iRegistView.failure(errorMsg);
}
@Override
public void success(UserBean userBean) {
iRegistView.success(userBean);
}
});
}
}
9.RegexValidateUtil
//专门用来正则表达式验证
public class RegexValidateUtil {
static boolean flag = false;
static String regex = "";
public static boolean check(String str, String regex) {
try {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
flag = matcher.matches();
} catch (Exception e) {
flag = false;
}
return flag;
}
//验证非空
public static boolean checkNotEmputy(String notEmputy) {
regex = "^\\s*$";
return check(notEmputy, regex) ? false : true;
}
//验证邮箱
public static boolean checkEmail(String email) {
String regex = "^\\w+[-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$ ";
return check(email, regex);
}
//验证手机号码
public static boolean checkCellphone(String cellphone) {
String regex = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9])|(17[0,5-9]))\\d{8}$";
return check(cellphone, regex);
}
//验证固话号码
public static boolean checkTelephone(String telephone) {
String regex = "^(0\\d{2}-\\d{8}(-\\d{1,4})?)|(0\\d{3}-\\d{7,8}(-\\d{1,4})?)$";
return check(telephone, regex);
}
//验证传真号码
public static boolean checkFax(String fax) {
String regex = "^(0\\d{2}-\\d{8}(-\\d{1,4})?)|(0\\d{3}-\\d{7,8}(-\\d{1,4})?)$";
return check(fax, regex);
}
//验证QQ号码
public static boolean checkQQ(String QQ) {
String regex = "^[1-9][0-9]{4,} $";
return check(QQ, regex);
}
}
10.IRegistView
//用来写注册方法的接口
public interface IRegistView {
//校验手机号合法
void mobileVerify();
void mobileEmpty();
//校验密码
void pwdVerify();
//请求成功
void success(UserBean userBean);
void failure(String msg);//请求失败
}
11.RegistActivity
//注册页面,需要实现注册接口层
public class RegistActivity extends AppCompatActivity implements IRegistView{
private EditText mobile_et;
private EditText pwd_et;
private RegisterPresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_regist);
//初始化方法
initView();
initData();
}
//初始化控件
private void initView() {
mobile_et = findViewById(R.id.mobile_et);
pwd_et = findViewById(R.id.pwd_et);
}
private void initData() {
presenter = new RegisterPresenter(this);
}
//注册方法
public void register(View view) {
//
presenter.register(mobile_et.getText().toString(),pwd_et.getText().toString());
//创建register();
register();
}
//用来写OkHttp请求方法
private void register() {
}
@Override
public void mobileVerify() {
Toast.makeText(this, "手机号必须11位数的合法手机号", Toast.LENGTH_SHORT).show();
}
@Override
public void mobileEmpty() {
Toast.makeText(this, "手机号不能为空", Toast.LENGTH_SHORT).show();
}
@Override
public void pwdVerify() {
Toast.makeText(this, "密码不合法", Toast.LENGTH_SHORT).show();
}
@Override
public void success(UserBean userBean) {
Toast.makeText(this, userBean.msg, Toast.LENGTH_SHORT).show();
startActivity(new Intent(this, MainActivity.class));
}
@Override
public void failure(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
12.注:注册页RegistActivity注册成功跳转MainActivity,AndroidManifest.xml中改变主次位置
<activity android:name=".RegistActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity"></activity>