一种Android数据请求框架
大部分Android应用一般都涉及到跟server的交互,除非是某些单机应用。既然要跟server打交道,向server请求数据差点儿是必做的事情,或许每家的APP都有一套自己的详细实现逻辑。但我们还是能够抽象出来一个通用的数据请求框架。
先上图:
我们来详细分析一下。首先竖直虚线左側是Androidclient。右側是server、后台数据库。
左側图中,3个灰色的模块就是Android中的MVC(具体介绍请參考之前的一篇文字《Android中的MVC模式简单介绍》),当中Activity或Fragment充当了Controller的角色。
接下来我们具体介绍下具体的步骤:
1.在Android应用中。用户一般都通过View来交互。比方点击某个button调用接口请求数据,或者对ListView进行下拉刷新等,所以非常多时候我们是通过View来告诉Controller须要请求数据,当然也有例外的情况,比方当载入某个Activity时就须要先请求数据,此时不须要第1步的通过View来触发请求。
2.这一步比較简单。就是向server发送http请求。在Android应用中,一般都是通过http的方式来请求数据的,请求过程中附带必需的參数。为了防止ANR。此操作包或兴许的3、4、5步都应当在子线程中实现。
3.server向client返回数据。通常就是轻量级的易传输的JSON格式,当然也有使用XML格式的。
4.client拿到JSON格式的返回结果后,我们并不能直接使用。须要使用一个解析器Parser,把JSON数据解析成我们须要的数据模型。即得到Models。在这里,假设是某些特殊的数据或者产品需求,能够对数据做缓存处理,当网络异常或者下次不想联网请求数据时,我们能够直接从Cache中拿数据来使用。
5.当数据被解析成Models之后,Controller就能够使用它来更新视图了,解析数据完毕后,一般都会设置一种机制来通知Controller。方法有非常多,比方Android的消息机制。
6.最后一步是Controller使用Models中的数据来更新View。须要注意的是必须在UI线程来运行。
数据请求框架大概就是这样,比較清楚的一个逻辑。我们请求的数据中不可避免地会有图片数据,那么图片怎样下载、怎样做缓存,又是一个非常大的问题,在这里先总结这个整体的数据请求框架,兴许会总结一下关于图片下载、缓存、载入的框架。
一种Android数据请求框架的更多相关文章
- Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)
最近做项目要求使用到网络,想来想去选择了AsyncHttpClient框架开进行APP开发.在这里把我工作期间遇到的问题以及对AsyncHttpClient的使用经验做出相应总结,希望能对您的学习有所 ...
- Android Http请求框架二:xUtils 框架网络请求
一:对Http不了解的请看 Android Http请求框架一:Get 和 Post 请求 二.正文 1.xUtils 下载地址 github 下载地址 : https://github.com/w ...
- Android Http请求框架一:Get 和 Post 请求
1.HttpUtil package com.app.android01; import java.io.BufferedReader; import java.io.IOException; imp ...
- Android网络请求框架
本篇主要介绍一下Android中经常用到的网络请求框架: 客户端网络请求,就是客户端发起网络请求,经过网络框架的特殊处理,让后将请求发送的服务器,服务器根据 请求的参数,返回客户端需要的数据,经过网络 ...
- Android 网络请求框架android-async-http问题
今天通过接口请求服务器的一些app数据,发现一个很奇怪的问题,请求一个链接的时候,通常在第一次请求发起的时候没有什么问题,能很快的拿到数据,但是 往后再去请求的时候就会等待很久,而且最后会请求失败,一 ...
- Android网络请求框架之Retrofit实践
网络访问框架经过了从使用最原始的AsyncTask构建简单的网络访问框架(甚至不能称为框架),后来使用开源的android-async-http库,再到使用google发布的volley库,一直不懈的 ...
- Java/Android 网络请求框架/库
Android 图片缓存框架 最上面的最优先 com.facebook.fresco:fresco:0.12.0 7.26.2016最新 Universal-Image ...
- Android 网络请求框架Retrofit
Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp ...
- 几种Android数据序列化方案
一.引言 数据的序列化在Android开发中占据着重要的地位,无论是在进程间通信.本地数据存储又或者是网络数据传输都离不开序列化的支持.而针对不同场景选择合适的序列化方案对于应用的性能有着极大的影响. ...
随机推荐
- 【BZOJ 2024】 2024: [SHOI2009] 舞会 (容斥原理+高精度)
2024: [SHOI2009] 舞会 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 368 Solved: 102 Description OIto ...
- bzoj 4094: [Usaco2013 Dec]Optimal Milking
4094: [Usaco2013 Dec]Optimal Milking Description Farmer John最近购买了N(1 <= N <= 40000)台挤奶机,编号为1 . ...
- 新浪微博API的使用Python
本文记录了用新浪微博官方Python SDK调用API进行开发的流程. 准备工作 申请成为开发者并创建一个应用: 首先要有一个新浪微博的账号,然后去新浪微博开放平台(http://open.weibo ...
- JAVA 垃圾收集监控
我们可以使用Java命令行和UI工具来监控应用程序的垃圾收集活动.下面的例子中,我使用Java SE Downloads 中一个演示程序. 如果你想使用同样的程序,前往 Java SE Downloa ...
- HDU 4671 Backup Plan (2013多校7 1006题 构造)
Backup Plan Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- matlab mex中C++内存全局共享和持久化
为提高matlab程序运行速度,经常将核心程序编写为mex动态链接库: 然而,经常情况下,在mex函数中分配的内存或句柄希望在mex函数调用完成后在后续函数调用中能够共享而不被释放,本程序方法为解决该 ...
- cocos3.0使用cocostudio动画帧结合地图对象键值创建精灵动画
内容例如以下: #include "cocos2d.h" #include "cocostudio/CocoStudio.h" //精灵猫和其它精灵的tag t ...
- linux查看某个端口是被哪个进程占用的
查看某个端口是被哪个进程占用的: netstat -tunpl | grep 6379
- .NET:命令行解析器介绍
背景 经常需要开发一下小工具,之前都是自己解析命令行参数,接触过动态语言社区以后,发现命令行解析有特定的模式和框架可以利用,本文介绍一个 .NET 平台的类库. 示例 需求 拷贝文件,如:CopyFi ...
- appium+python自动化52-多点触控MultiAction
前言 MultiAction是针对多点触控操作的,是TouchAction的一个补充模块 TouchAction用法参考前面的一篇:appium+python自动化33-TouchAction 多点触 ...