简单的MVP写法(二)
来源:互联网 发布:acdsee软件 编辑:程序博客网 时间:2024/06/04 23:42
前面已经写了简单的MVP写法(一),现在介绍另外一种MVP的写法。
这种写法分为三层
Model :
public abstract class BaseModel {}
View :
public interface BaseView{ void onError(String e); void setPresenter(); Activity getCurrentActivity();}
Presenter :
public interface BasePresenter { Context getContext(); void provideErrorMessage(String msg);}
当然了base中的方法完全可以由自己的业务需求来决定。
接下来举个例子:
Model的实现:
public class ExampleModel extends BaseModel { private Context mContext; private ExamplePresenter mPresenter; public ExampleModel(ExamplePresenter mPresenter) { this.mPresenter = mPresenter; mContext = mPresenter.getContext(); } public void getExampleDataFromServer(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) { mPresenter.provideExampleData(list); } @Override protected void _onError(Throwable e) { mPresenter.provideErrorMessage(e.toString()); } }); }}
ExampleModel负责向服务器发起网络请求,请求到数据之后,在回调方法中,由构造函数中传进来的Presenter负责传递数据。
再来看一下Presenter的接口和实现
public interface ExamplePresenter extends BasePresenter{ void getExampleData(String name,String longitude,String latitude,String sex); void provideExampleData(List<NearbyPerson> list);}
接口有两个方法,一个方法负责请求数据,一个方法负责传递数据给view层
下面来看具体实现:
public class ExamplePresenterImpl implements ExamplePresenter { private ExampleModel mExampleModel; private ExampleView mExampleView; public ExamplePresenterImpl(ExampleView mExampleView) { this.mExampleView = mExampleView; mExampleModel = new ExampleModel(this); } @Override public Context getContext() { return mExampleView.getCurrentActivity(); } @Override public void provideErrorMessage(String msg) { mExampleView.onError(msg); } @Override public void getExampleData(String name,String longitude,String latitude,String sex) { //发起请求,实际上是让model去做 mExampleModel.getExampleDataFromServer(name,longitude,latitude,sex); } @Override public void provideExampleData(List<NearbyPerson> list) { //拿到数据之后,将数据给view mExampleView.showExampleData(list); }}
在需要数据地方,实现view层接口:
View接口:
public interface ExampleView extends BaseView{ void showExampleData(List<NearbyPerson> data);}
具体实现:
public class MainActivity extends AppCompatActivity implements ExampleView
复写方法:
@Override public void showExampleData(List<NearbyPerson> data) { mShow.setText(data.toString()); }
最后还少的是一个开始,需要由presenter发起网络请求:
先初始化presenter:
mExamplePresenter = new ExamplePresenterImpl(this);
在需要发起请求的地方:
mExamplePresenter.getExampleData("","","","");
最后完整的项目:
https://github.com/ckwcc/AnotherMVP
阅读全文
0 0
- 简单的MVP写法(二)
- 简单的MVP写法(一)
- MVP设计模式的写法
- MVP 实现原理及简单案例登陆(二)
- mvp的基本登录(简单实现)
- MVP的简单理解
- MVP的简单理解
- MVP的简单实例
- MVP 简单的例子
- MVP的简单使用
- MVP的简单介绍
- MVP的简单登录
- MVP的简单登录
- MVP的简单使用
- MVP的简单使用
- 简单的MVP框架
- 标准Sql语句的写法(二)
- 史上最简单的MVP模式
- 表集合的extend属性
- Android RxJava操作符详解系列: 创建操作符
- PostMessage
- 大型网站技术架构(二)——架构模式
- 12.1 省选训练总结2(1) 点分治/平衡树
- 简单的MVP写法(二)
- 机器学习实战(5)逻辑回归
- python numpy 数组中元素大于等于0的元素
- 点赞, 飘赞动画
- CSS3的过渡和动画
- 一款超好用的二级菜单
- Mac tcp/udp 调试工具
- Java WebService 简单实例
- XSKY 分布式存储(笔记)