大部分Android应用一般都涉及到跟服务器的交互,除非是某些单机应用。既然要跟服务器打交道,向服务器请求数据几乎是必做的事情,也许每家的APP都有一套自己的具体实现逻辑,但我们还是可以抽象出来一个通用的数据请求框架。
先上图:
我们来具体分析一下,首先竖直虚线左侧是Android客户端,右侧是服务器、后台数据库。
左侧图中,3个灰色的模块就是Android中的MVC(详细介绍请参考之前的一篇文字《Android中的MVC模式简介》),其中Activity或Fragment充当了Controller的角色。接下来我们详细介绍下具体的步骤:
1.在Android应用中,用户一般都通过View来交互,比如点击某个按钮调用接口请求数据,或者对ListView进行下拉刷新等,所以很多时候我们是通过View来告诉Controller需要请求数据,当然也有例外的情况,比如当加载某个Activity时就需要先请求数据,此时不需要第1步的通过View来触发请求。
2.这一步比较简单,就是向服务器发送http请求,在Android应用中,一般都是通过http的方式来请求数据的,请求过程中附带必需的参数,为了防止ANR,此操作包或后续的3、4、5步都应当在子线程中实现。
3.服务器向客户端返回数据,通常就是轻量级的易传输的JSON格式,当然也有使用XML格式的。
4.客户端拿到JSON格式的返回结果后,我们并不能直接使用,需要使用一个解析器Parser,把JSON数据解析成我们需要的数据模型,即得到Models。在这里,如果是某些特殊的数据或者产品需求,可以对数据做缓存处理,当网络异常或者下次不想联网请求数据时,我们可以直接从Cache中拿数据来使用。
5.当数据被解析成Models之后,Controller就可以使用它来更新视图了,解析数据完成后,一般都会设置一种机制来通知Controller,方法有很多,比如Android的消息机制。
6.最后一步是Controller使用Models中的数据来更新View,需要注意的是必须在UI线程来执行。
数据请求框架大概就是这样,比较清楚的一个逻辑。我们请求的数据中不可避免地会有图片数据,那么图片如何下载、如何做缓存,又是一个很大的问题,在这里先总结这个总体的数据请求框架,后续会总结一下关于图片下载、缓存、加载的框架。