Retrofit+Rxjava2.0+MVP一种设计模式

首先是依赖

    //添加retrofit依赖
    implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    //添加gson转换器的依赖
    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
    //注意 rxjava2是2.0的 不加2表示的是1.0
    implementation 'io.reactivex.rxjava2:rxjava:2.1.10'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'

各个接口

//V层接口
public interface IUser {

    //获取用户信息
    void showUser(UserNameBean userNameBean);

    //用户信息的uid
    String uid();
}
//M层接口
public interface IModel {

    //获取登录数据
    void getDataLogin(Map<String, String> map);

    //获取用户信息
    void getUser(String uid);

}
//隶属于model下的service
public interface MyService {

    @GET("user/login")
    Observable<LoginBean> getlogin(@QueryMap Map<String, String> map);

    @GET("user/getUserInfo")
    Observable<UserNameBean> getuser(@Query("uid") String uid);
}

//P层接口
public interface IPresenter {

    //p的登录请求数据
    void showLoginToView(IModel iModel, IMainView iMainView);

    //p的用户请求数据
    void showUserToview(IModel iModel, IUser iUser);

    //接受从m传上来的数据
    void getDataModel(LoginBean loginBean);

    void getDataUser(UserNameBean userNameBean);

    //接受异常
    void getError(String error);
}

Model层的具体实现

/**
 * model的具体实现
 */

public class ModelFusion implements IModel {

    private IPresenter iPresenter;

    public ModelFusion(IPresenter iPresenter) {
        this.iPresenter = iPresenter;
    }

    @Override
    public void getDataLogin(Map<String, String> map) {

        //网络请求
        RetrofitUtil retrofitUtil = RetrofitUtil.getInstance();
        MyService myService = retrofitUtil.createRequest(MyService.class);
        Observable<LoginBean> observable = myService.getlogin(map);
        //请求执行
        observable.subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<LoginBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(LoginBean loginBean) {

                        iPresenter.getDataModel(loginBean);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    @Override
    public void getUser(String uid) {

        //网络请求
        RetrofitUtil retrofitUtil = RetrofitUtil.getInstance();
        MyService myService = retrofitUtil.createRequest(MyService.class);
        Observable<UserNameBean> observable = myService.getuser(uid);
        //请求执行
        observable.subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<UserNameBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(UserNameBean userNameBean) {
                        iPresenter.getDataUser(userNameBean);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}

P层的具体实现

/**
 * Presenter的操作类
 */
public class PresenterFusion implements IPresenter {

    private IMainView iMainView;
    private IUser iUser;

    @Override
    public void showLoginToView(IModel iModel, IMainView iMainView) {
        this.iMainView = iMainView;
        //model请求数据
        Map<String,String> map = new HashMap<>();
        map.put("mobile",iMainView.mobile());
        map.put("password",iMainView.pass());
        iModel.getDataLogin(map);

    }

    @Override
    public void showUserToview(IModel iModel, IUser iUser) {
        this.iUser = iUser;
        iModel.getUser(iUser.uid());
    }

    @Override
    public void getDataModel(LoginBean loginBean) {

        iMainView.showLoginSuccess(loginBean);

    }

    @Override
    public void getDataUser(UserNameBean userNameBean) {
        iUser.showUser(userNameBean);
    }

    @Override
    public void getError(String error) {
        iMainView.showLoginError(error);
    }
}

V层具体实现

public class LoginActivity extends AppCompatActivity implements IMainView,IUser {

    @BindView(R.id.ed_mobile)
    EditText edMobile;
    @BindView(R.id.ed_pass)
    EditText edPass;
    @BindView(R.id.lo_register)
    TextView loRegister;
    @BindView(R.id.qq_login)
    ImageView qqLogin;
    private LoginBean loginBeanp;
    private PresenterFusion presenterFusion;
    private String suid;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        ButterKnife.bind(this);

    }

    public void cha(View view) {
        finish();
    }

    public void login(View view) {
        presenterFusion = new PresenterFusion();
        presenterFusion.showLoginToView(new ModelFusion(presenterFusion),this);

    }

    public void userinfo(){
        suid = String.valueOf(loginBeanp.getData().getUid());
        presenterFusion.showUserToview(new ModelFusion(presenterFusion),this);

    }

    @Override
    public void showLoginSuccess(LoginBean loginBean) {
        this.loginBeanp = loginBean;
        if (loginBean.getCode().equals("0")){
            Toast.makeText(this,loginBean.getMsg(),Toast.LENGTH_SHORT).show();
            userinfo();
            finish();
        }else {
            Toast.makeText(this,loginBean.getMsg(),Toast.LENGTH_SHORT).show();
        }


    }

    @Override
    public void showLoginError(String error) {

    }

    @Override
    public String mobile() {
        return edMobile.getText().toString();
    }

    @Override
    public String pass() {
        return edPass.getText().toString();
    }


    @Override
    public void showUser(UserNameBean userNameBean) {

        EventBus.getDefault().post(new MessageEvent(userNameBean.getData().getUsername()));
    }

    @Override
    public String uid() {
        return suid;
    }
}

猜你喜欢

转载自blog.csdn.net/wrpbk/article/details/80384872
今日推荐