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
地址,这里的
ILoadDataListener
ILoadDataListener
接口内部定义了两个方法,一个
onSuccess
,一个
onFailed()
,主要用来表示获取数据成功还是失败的监听.一般的,在创建完
ILoadData
ILoadData
接口之后,我们会创建一个它的实现类
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