Android MVP 框架

前言

根据网络上的MVP套路写了一个辣鸡MVP DEMO

用到的

  • android studio MVPHelper插件,方便自动生成框架代码
  • rxjava
  • retrofit

什么是MVP

MVP就是英文的Model View Presenter,然而实际分包并不是只有这三个包,还有一个契约Contract接口包,根据项目情况还可以分更多包

  • Contract
  • Model
  • View 指activity和fragment,需要实现View接口
  • Presenter
Contract

定义Model、View、Presenter接口的方法,所有接口都在这里定义

public interface HomeContract {
    interface Model {
        void getDate(final BaseCallBack<TitleListBean> callBack);
    }
    interface View {
        //多个事件定义多个刷新页面方法
        void refreshUi(List<TitleListBean.ContentsBean> list);
    }
    interface Presenter {
        void load();
    }
}
Model

网络及本地数据请求操作,包括远程数据和本地数据的请求处理
远程数据用retrofit+rxjava实现,本地数据用room+rxjava,无论用什么方法最后都要通过callback返回结果

public class HomeModel implements HomeContract.Model {
    //获取数据
    public void getDate(final PresenterBaseCallBack<TitleListBean> callBack) {
        ApiService apiService = RetrofitUtil.getRetorfit().create(ApiService.class);
        apiService.getList().subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new BaseObserver<TitleListBean>() {
                    @Override
                    public void onNext(TitleListBean model) {
                        Log.d(TAG, "获取数据成功 ");
                        callBack.onResponse(model); //成功的数据请求结果
                    }
                    @Override
                    public void onError(Throwable e) {
                        e.printStackTrace(); //请求过程中发生错误
                        callBack.onFailure("获取数据失败"); //失败的数据请求结果
                    }
                    @Override
                    public void onComplete() {
                        Log.d(TAG, "刷新页面 ");
                    }
                });
    }
}
Presenter

可以理解为界面的点击、加载等事件的实现
作为view与model的桥梁,初始化的时候需要传入view对象和new一个model对象
通过view调用presenter,presenter调用model,model返回数据给presenter,presenter再返回数据给view展示

public class HomePresenter implements HomeContract.Presenter {
    private HomeContract.View homeView;
    private HomeContract.Model homeModel;
    private Context mContext;

    public HomePresenter(HomeContract.View view) {
        this.homeView = view;
        this.homeModel = new HomeModel();
    }

    @Override
    public void load() {
        /**
         * Presenter层逻辑处理
         * Presenter已经包含model与view对象
         * 1.通过model获取数据,new一个callback对象作为参数
         * 2.callback对象根据model返回的结果执行view的refreshUi方法刷新页面
         */
        this.homeModel.getDate(new PresenterBaseCallBack<TitleListBean>() {
            @Override
            public void onResponse(TitleListBean response) {
                homeView.refreshUi(response.getContents());
            }
            @Override
            public void onFailure(String error) {
            }
        });
    }
}
CallBack

这个接口属于Presenter层,也是model与view的桥梁,把model处理的结果告诉presenter,presenter根据处理结果告诉view刷新页面

public interface PresenterBaseCallBack<T> {
    void onResponse(T response);
    void onFailure(String error);
}
VIEW

创建presenter对象,view的所有事件就是对应presenter的方法

public class HomeFragment extends BaseFragment implements HomeContract.View {
    private HomeContract.Presenter presenter;

    @Override
    protected void initView(Bundle savedInstanceState) {
        presenter = new HomePresenter(this,getContext());   //初始化Presenter,包含view和model
        presenter.load();                                   //Presenter层逻辑处理
    }

    @Override
    public void refreshUi(List<TitleListBean.ContentsBean> list) {  //数据获取成功后的页面刷新
        //list 就是返回的数据,执行页面刷新
    }
}

一个辣鸡Demo

戳这里

转载于:https://my.oschina.net/AStar/blog/2244802

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值