Retrofit+RxJava+MVP模式使用

在2015年时rxjava特别火,项目的一个搭档就建议使用了mvp+rxjava+Retrofit框架,当时看的是一脸惆怅,因为搭档封装的特别多,也特别复杂所以就特别抵触,最后也是要跟进项目硬着头皮学习rxjava相关知识。但是总感觉没有Mvc架构的写的溜,最后由于某些原因就在没有使用此技术。

最近项目使用了mvp+rxjava+Retrofit的知识,那我就谈谈:

1.首先mvp架构的架构组成由modele,presenter和view组成,Presenter是model和view的桥梁关系,两者之间的交互必须经过presenter层,presenter中是代码逻辑处理层,view只负责拿到数据展示而已,model层是数据那就必须提供数据,数据来自于网络,所以model也做网络请求数据,也就是Rxjava+retrofit的功能部分。通过在presenter回调到数据给view进行展示


public class AccountLoginFragment extends BaseNoPagerFragment implements View.OnClickListener,
        LoginContracts.LoginView {
    private EditText editAccout;
    private EditText editPassWord;
    private Button login;
    private Button quickLogin;
    AutoLoginPresenter loginPwdPresenter;
    private String value;
    private ImageView ivEye;
    private boolean isOpen = true;

    @Override
    protected void initToolBar(ShiKeToolBar toolbarRootFgNoPager) {
        toolbarRootFgNoPager.setTitle("登陆");
    }

    @Override
    protected void initPresenters(ArrayList<IBasePresenter> basePresenters) {
        basePresenters.add(loginPwdPresenter);
    }

    //调用
    @Override
    protected void initData() {
        loginPwdPresenter = new AutoLoginPresenter(this);
        loginPwdPresenter.autoLogin();
    }

    //modele请求数据成功数据交给presenter然后后回调方法用于展示 
    @Override
    public void onLoginSuccess(String success) {
        if (progressDialog.isShowing()) {
            progressDialog.dismiss();
        }
        LoginBean loginBean = new Gson().fromJson(success, LoginBean.class);
    }

    //modele请求数据失败数据交给presenter然后后回调方法用于展示
    @Override
    public void onErrorLogin(String error) {
        showToast("网络错误"):
    }

    //请求网络用到的参数回调到presenter层,交给model请求网络
    @Override
    public Map<String, String> loadLoginInfo() {
        Map<String, String> map = new HashMap<>();
        value = editAccout.getText().toString().trim();
        map.put("username", value);
        map.put("password", editPassWord.getText().toString().trim());
        return map;
    }
}
perstener层逻辑

public class AutoLoginPresenter extends LoginContracts.IPresenter {

    public AutoLoginPresenter(LoginContracts.LoginView view) {
        super(view);
        model = new LoginModel();
    }

    @Override
    public void autoLogin() {
        Subscription subscribe = model.autoLogin(aesCode(view.loadLoginInfo()))
                .retryWhen(new RetryFunc1())
                .subscribe(new BaseSubscriber<String>(view) {
                    @Override
                    public void onNextStep(String step) {
                        view.onLoginSuccess(step);
                    }

                    @Override
                    public void onError(Throwable e) {
                        view.onErrorLogin(e.getMessage());
                    }
                });
        addSubscription(subscribe);
    }
}

//model层逻辑
public class LoginModel implements LoginContracts.IModel {
    @Override
    public Observable<String> autoLogin(String login) {
        return RetrofitManager.getInstance().getCommonApi().autoLogin(login);
    }

}

/**
 * Created by tyranny on 2017/8/16 14:59.
 *
 * @version 1.0.0
 */

public class LoginContracts {
    public interface LoginView extends IBaseView {
        Map<String, String> loadLoginInfo();

        void onLoginSuccess(String success);

        void onErrorLogin(String error);
    }

    public interface IModel extends IBaseModel {
        Observable<String> autoLogin(String login);

        Observable<String> loginForPhone(String login);

        Observable<String> loginForPwd(String login);
    }

    public abstract static class IPresenter extends IBasePresenter<LoginView, IModel> {
        public IPresenter(LoginView view) {
            super(view);
        }

        public abstract void autoLogin();

        public abstract void phoneLogin();

        public abstract void pwdLogin();
    }

} 

 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值