1.需求设计:
定义一个需求,打开界面的时候访问网络数据,在请求结束之前显示进度条,请求成功后隐藏进度条并显示请求回来的文本,请求失败之后隐藏进度条并显示错误信息
2.代码结构设计
如图所示,整个分为model,view和presenter层,model执行真正的数据请求操作,其中既包括了网络访问,也包含了数据库的访问,文件操作等.view层主要进行界面的展示操作,里面要做的内容就是操作控件,presenter层主要是对model层和view层进行耦合.将二者进行结合.下面以MainActivity作为入口进行整个框架的介绍.
1.首先我们要明确我们的视图需要进行哪些操作,再根据这些操作定义相应的接口,比如我们这里就需要控制进度条的显示和隐藏,以及显示网络请求的结果,我们定义接口IView,里面定义几个方法,showLoading()显示进度条,hideLoading()隐藏进度条,showText(String text)显示请求结果内容.
在
MainActivity需要实现IView接口,然后重写里面的所有:方法,并在方法内部进行相应的界面操作,同时在MainActivity里面还要新建一个Presenter对象,将自身传进去,接着调用Presenter的加载数据的方法,只有调用了加载数据的方法,MainActivity里面重写的三个方法才能生效2.刚刚我们用到了
Presenter层的一个类,在代码中我们定义的是DataPresenter,DataPresenter
它由一个带参的构造方法以及一个加载数据的方法组成,在
loadData()方法中我们会调用model层的方法来进行实际的加载数据的动作,这里我们就需要进行model层的介绍了,model里面首先会有一个接口ILoadData,接口定义了一个getData()方法,方法中会传入一个参数,一般是一个监听器的子类对象(ILoadDataListener),如果涉及到网络请求操作的话还会传入一个url地址,这里的ILoadDataListenerILoadDataListener
接口内部定义了两个方法,一个
onSuccess,一个onFailed(),主要用来表示获取数据成功还是失败的监听.一般的,在创建完ILoadDataILoadData
接口之后,我们会创建一个它的实现类
ILoadDataImpl,在里面重写
getData()方法,然后将网络请求写在里面,demo中我们使用了retrofit来进行网络请求在onResponse()方法内部调用ILoadDataListener的onSuccess()方法,在onFailure()内部调用onFailed()方法ILoadDataImpl
3.我们再来梳理一下整个流程,当界面启动的时候,初始化
Presenter对象,接着调用其loadData()方法,loadData()中调用ILoadDataImpl的getData()方法,传入ILoadDataListener子类对象,重写onSuccess和onFailed方法,在这两个方法中调用IView接口的相关操作ui的方法,这里面我们总共定义了三个接口,两个是model层的,一个是view层的,分别承担了数据加载,数据监听和界面更新的功能,可见接口定义在mvp开发框架中的重要性,可以说是框架的框架,因此搭建整个框架的第一步就是梳理出好的接口框架,这样在后面复用性和效率上会大有益处.demo上传到本人github:https://github.com/yangtao0619/MvpDemo