Mvp+OkHttp实现注册01

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值