Retrofit + OkHttp + RxJava 简单实现

今天又有时间学学东西,写写博客了,虽然已经快2点了,还是没有一丝丝困倦之意,之前自己对mvp有了大概1% 的不全面的认识,今天大概有了5%的认识了,算是小小的进步,对于第一次接触mvp的同学请移步第一步

...

这篇介绍与上一次的区别有如下几点,增加了Contract(契约接口),实现登录的逻辑,增加使用ButterKnifeLeakCanary

...

契约接口

<pre>
public interface LoginContract {
interface View extends BaseHttpView {
/**
* 登录时,本地验证手机号码不对
*/
void onLocalPhoneError();

    /\*\*
     \* 登录时,本地验证密码不对
     \*/
    void onLocalPwdError();
}

interface Presenter extends BaseHttpPresenter{
    /\*\*本地验证登录信息\*/
    void localValidateLoginInfo(@NonNull  String phone,@NonNull String pwd);
    /\*\*请求登录接口\*/
    void login(@NonNull String phone, @NonNull String pwd);
}

}
</pre>

<pre>
public class LoginPresenter implements LoginContract.Presenter {
private LoginContract.View view;

public LoginPresenter(@NonNull LoginContract.View view) {
    this.view = view;
}
@Override
public void localValidateLoginInfo(String phone, String pwd) {
    if(!StringUtil.isPhoneNum(phone)){
        view.onLocalPhoneError();
        return;
    }
    if(!StringUtil.isLengthOK(pwd, AppConst.loginPwdMinLength, AppConst.loginPwdMaxLength)){
        view.onLocalPwdError();
        return;
    }
    login(phone, pwd);
}

@Override
public void login(@NonNull String phone, @NonNull String pwd) {
    OkHttpClient okHttpClient =  OkHttpUtil.getInstance().getOkHttpClient(new LogInterceptor(), new HeadParams().addHeader("phoneNum",phone).addHeader("uuid", DeviceUtil.getSafeDeviceSoleId(App.getApp())));
    Retrofit retrofit = new Retrofit.Builder().baseUrl(Url.doMainApi).client(okHttpClient).addConverterFactory(GsonConverterFactory.create())//添加 json 转换器
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())//添加 RxJava 适配器
            .build();
    HttpMan httpMan = retrofit.create(HttpMan.class);
    httpMan.login(phone,pwd).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new MyHttpSubscriber());
}
private final class MyHttpSubscriber extends HttpSubscriber<LoginBean> {
    @Override
    public void onStart() {
        view.showLoadingDialog();
    }
    @Override
    public void onFailure(int code, String message) {
        Logger.e(code+" "+message);
        view.dismissLoadingDialog();
    }
    @Override
    public void onSuccess(LoginBean result) {
        view.dismissLoadingDialog();
        Logger.e("登录成功");
    }
}

private final class LogInterceptor implements HttpLoggingInterceptor.Logger{
    @Override
    public void log(String message) {
        Logger.e(message);
    }
}

}

</pre>
<pre>
public class LoginActivity extends BaseActivity implements LoginContract.View {
private LoginPresenter loginPresenter;
@Override
public int getLayoutResID() {
return R.layout.activity_login;
}

@Override
public int getLeftTitleViewId() {
    return R.id.iv_back;
}

@Override
public void onCreateData() {
    super.onCreateData();
    ButterKnife.bind(this);
    loginPresenter = new LoginPresenter(this);
    setText(R.id.tv_title, "登录");
    findView(R.id.tv_login).setOnClickListener(this);
}

@Override
public void onClick(View v) {
    if (R.id.tv_login == v.getId()) {
        loginPresenter.localValidateLoginInfo(etPhone.getText().toString(), etPwd.getText().toString());
    }
}

@Override
public void onLocalPhoneError() {
    showToast(AppConst.userManPhone);
}

@Override
public void onLocalPwdError() {
    showToast(AppConst.userLoginPwd);
}

}

</pre>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值