Retrofit + OkHttp + RxJava 简单实现

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

今天又有时间学学东西,写写博客了,虽然已经快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>

目录
相关文章
|
6月前
retrofit+okhttp+rxjava
retrofit+okhttp+rxjava
|
8月前
|
JSON Java 数据格式
rxjava2+retrofit2
rxjava2+retrofit2
59 1
|
设计模式 缓存 监控
OKHttp3 从使用到原理分析
Okhttp3 是我们经常使用的一个网络框架,可扩展性强,支持 get 缓存, spdy、http2.0,gzip 压缩减少数据流量,同步和异步请求,连接池复用机制等特性让广大 android 开发者深爱不已,今天我就带大家从 Okhttp 简单使用,到各种好用拦截器原理了解 Okhttp3
1949 0
OKHttp3 从使用到原理分析
|
JSON 安全 Java
Retrofit入门
Retrofit入门
|
JSON Java 数据格式
rxjava2+retrofit2 简介
rxjava2+retrofit2 简介
111 0
|
JSON Android开发 数据格式
RxJava+Retrofit示例 ,Retrofit 注解学习
RxJava+Retrofit示例 ,Retrofit 注解学习
177 0
|
JSON Android开发 数据格式
使用Retrofit + RxJava 网络请求
使用Retrofit + RxJava 网络请求
402 0
使用Retrofit + RxJava 网络请求
|
设计模式 Java API
【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
356 0
【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
|
存储
Retrofit+OkHttp实现Cookie持久化,RxJava方式
Retrofit+OkHttp实现Cookie持久化,RxJava方式
319 0
|
Android开发 Java JSON
RxJava2 和 Retrofit2 结合使用详解
不讲 rxjava 和 retrofit 而是直接上手 2 了,因为 2 封装的更好用的更多。 1. 观察者模式 常见的 button 点击事件为例,button 是被观察者,listener 是观察者,setOnClickListener 过程是订阅,有了订阅关系后在 button 被点击的时候,监听者 listener 就可以响应事件。