Android MVP模式(二) 使用rxjava2实现的MVP简单框架demo

Android MVP模式(一)中讲到

在MVP 架构中跟MVC类似的是同样也分为三层。

Activity 和Fragment 视为View层,负责处理 UI。

Presenter 为业务处理层,既能调用UI逻辑,又能请求数据,该层为纯Java类,不涉及任何Android API。

Model 层中包含着具体的数据请求,数据源。

三层之间调用顺序为view->presenter->model

所以创建一下package,其他tool为工具包

一.view层

1.创建BaseActivtiy

public abstract class BaseActivtiy extends AppCompatActivity{

    protected Activity activity;
    protected Context context;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initPresenter();
        initView();
        initData();
        initListener();
    }
    protected abstract void initPresenter();
    protected abstract void initView();
    protected  abstract void initData();
    protected  abstract void initListener();

}

2.创建View的回调接口

public interface IBaseView {
    void showToast(String t);
    void success();
    void fail();
}

二.presenter层

1.创建presenter接口

public interface IBasePresenter {
    void onCreate();

    void onResume();

    void onPause();

    void onDestroy();

    void finish();

    void log(String s);
}

2.创建Presenter基类BasePresenter,实现IBasePresenter接口,因为希望Presenter中持有的View都是BaseView的子类,所以需要泛型来约束

public class BasePresenter<V extends IBaseView> implements IBasePresenter {

    protected V mView;
    protected Activity mActivity;

    public BasePresenter(Activity activity,V iv){
        this.mActivity = activity;
        this.mView = iv;
    }

    @Override
    public void onCreate() {

    }

    @Override
    public void onResume() {

    }

    @Override
    public void onPause() {

    }

    @Override
    public void onDestroy() {
        mActivity = null;
        mView = null;
    }

    @Override
    public void finish() {
        mActivity.finish();
    }

    @Override
    public void log(String s) {
        LogTool.d(s);
    }
}

三.Model层

创建MainModel,通过rxjava把信息返回到Presenter层

public class MainModel {

    public void getMainData(Observer<String> observer){
        Observable.create(new ObservableOnSubscribe<String>(){
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception{
                try{
                    emitter.onNext("hello");
                }catch (Exception e){
                    emitter.onError(e);
                }finally {
                    emitter.onComplete();
                }
            }
        })
                .subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
    }
}

四.创建MainPresenter,继承BasePresenter,接收Model层返回的信息

同时将信息通过view接口传递到View层

public class MainPresenter extends BasePresenter<IBaseView>{

    private MainModel mMainModel;

    public MainPresenter(Activity activity,IUpdateView iv){
        super(activity,iv);
        mMainModel = new MainModel();
    }

    public void loadData(){
        mMainModel.getMainData(new Observer<String>() {
                                   @Override
                                   public void onSubscribe(Disposable d) {

                                   }

                                   @Override
                                   public void onNext(String s) {
                                       mView.success();
                                   }

                                   @Override
                                   public void onError(Throwable e) {
                                        mView.fail();
                                   }

                                   @Override
                                   public void onComplete() {
                                        mView.showToast("OK");
                                   }
                               }
        );
    }
}

五.创建MainActivity继承BaseActivity,实现IBaseView,接收Presenter层信息

public class MainActivity extends BaseActivtiy implements IUpdateView{

    MainPresenter mMainPresenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    protected void initPresenter() {
        activity =this;
        mMainPresenter = new MainPresenter(activity,this);
    }

    @Override
    protected void initView() {
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void initData() {
        mMainPresenter.loadData();
    }

    @Override
    protected void initListener() {

    }

    @Override
    public void showToast(String t) {
        LogTool.i(t);
    }

    @Override
    public void success() {
        LogTool.i("success");
    }

    @Override
    public void fail() {
        LogTool.i("fail");
    }
}

 

这样一个简单的MVP框架就实现了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值