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