简单的MVP写法(一)
来源:互联网 发布:musecc 2018mac破解版 编辑:程序博客网 时间:2024/06/03 06:22
目前接触过的项目,大部分都是MVP模式,现在使用MVP模式比较习惯。
关于MVP的概念:
M-Model-模型、V-View-视图、C-Controller-控制器,MVP作为MVC的演化版本,那么类似的MVP所对应的意义:M-Model-模型、V-View-视图、P-Presenter-表示器。 个人认为,MVP与MVC最不同的一点是M与V是不直接关联的也是就Model与View不存在直接关系,这两者之间间隔着的是Presenter层,其负责调控 View与Model之间的间接交互。本质就是降低了程序的耦合性。MVP三个层各自负责相应的任务就好了,Model层负责获取数据,通过Presenter层将数据传递给View层(一般是实现了特定View接口的Activity和Fragment)。
对于MVP模式的具体实现,有这很多的理解,下面简单的介绍一种,这种写法和谷歌官方给出的demo类似,个人感觉是简化了Model层,首先是写一个Contract接口:
public interface SearchBookContract { interface SearchBookView extends BaseView{ void showNearbyListResult(List<NearbyPerson> list); } interface SearchBookPresenter extends BasePresenter{ void getSearchBooks(String name,String longitude,String latitude,String sex); }}
这个接口里面有两个接口,分别代表View和Presenter,BaseView和BasePresenter可以由各自项目的需求具体再写。
接下来是Presenter的具体实现:
public class SearchBookPresenterImpl implements SearchBookContract.SearchBookPresenter { private SearchBookContract.SearchBookView mSearchBookView; private Context mContext; public SearchBookPresenterImpl(SearchBookContract.SearchBookView mSearchBookView) { this.mSearchBookView = mSearchBookView; } @Override public void getSearchBooks(String name,String longitude,String latitude,String sex) { AppNetLoader.getInstance().async(AppNetLoader.getInstance().getService().getNearbyPersonList(name, longitude, latitude, sex), new BaseObserver<List<NearbyPerson>>() { @Override protected void setNeedContext() { setContext(mContext); } @Override protected void _onNext(List<NearbyPerson> list) { mSearchBookView.showNearbyListResult(list); } @Override protected void _onError(Throwable e) { mSearchBookView.onError(e.toString()); } }); } @Override public void getContext(Context context) { mContext = context; }}
实现SearchBookPresenter 的方法,在getSearchBooks方法中发起网络请求,获取数据,再通过Rxjava的转换,在回调方法中,mSearchBookView获得了数据。
在需要数据的Activity或者Fragment中,实现SearchBookContract.SearchBookView,实现其方法之后,就可以拿到数据啦。
需要注意的是,需要在Activity或者Fragment中先初始化对应的Presenter,
private SearchBookPresenterImpl mPresenter;
然后在onceate方法中
mPresenter = new SearchBookPresenterImpl(this);
接着在需要发起网络请求的地方发起请求就好了:
mPresenter.getSearchBooks("","","",'");
最后在其回调中回去请求成功或者失败的数据:
这是请求成功的方法
@Override public void showNearbyListResult(List<NearbyPerson> list) { mShow.setText(list.toString()); }
这是请求失败的方法
@Override public void onError(String e) { mShow.setText(e); }
最后,具体的代码(包括Retrofit+Rxjava的封装,网络请求封装)都在我的github中:
https://github.com/ckwcc/MVP-Retrofit-RxJava
- 简单的MVP写法(一)
- 简单的MVP写法(二)
- MVP设计模式的写法
- 从零开始搭建 一个完善的 MVP模式开发框架(一),MVP模式的简单介绍篇
- 【Android学习】两种MVP模式的学习(一):谷歌例子的简单学习
- 简单的MVP+Retrofit+RxJava请求网络数据(一)
- mvp的基本登录(简单实现)
- MVP的简单理解
- MVP的简单理解
- MVP的简单实例
- MVP 简单的例子
- MVP的简单使用
- MVP的简单介绍
- MVP的简单登录
- MVP的简单登录
- MVP的简单使用
- MVP的简单使用
- 简单的MVP框架
- CSV格式整理,去除与上一行数据重复的单元格
- 画饼图
- Relevant Search.pdf 英文原版 免费下载
- 浅析map和multimap应用的小程序
- 四则运算的递归python实现
- 简单的MVP写法(一)
- node.js
- 豆瓣项目的思路总结
- Learning Django Web Development.pdf 英文原版 免费下载
- jenkins 构建脚本时javac编译出错自动停止任务
- scss
- Linux(CentOs) 下安装 Mysql
- Android Animation 之 View Animation(补间动画)
- Spring-WebSocket配置以及使用