一种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开发中占据着重要的地位,无论是在进程间通信.本地数据存储又或者是网络数据传输都离不开序列化的支持.而针对不同场景选择合适的序列化方案对于应用的性能有着极大的影响. ...
随机推荐
- 基于libevent和unix domain socket的本地server
https://www.pacificsimplicity.ca/blog/libevent-echo-server-tutorial 根据这一篇写一个最简单的demo.然后开始写client. cl ...
- struts2框架的大致处理流程
1,浏览器发送请求,例如请求 /mypage.action /report/myreport.pdf等. 2,核心控制器FilterDispatcher根据请求决定调用合适的Action. 3,Web ...
- 【BZOJ 4027】 4027: [HEOI2015]兔子与樱花 (贪心)
4027: [HEOI2015]兔子与樱花 Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号 ...
- java 抽象类 接口 区别
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 接口 里面 都是抽象方法. 接口里面的 字段 都是 public static fina ...
- The 2016 ACMICPC Asia Beijing Regional Contest
A. Harmonic Matrix Counter (3/19) B. Binary Tree (1/14) C. Asa's Chess Problem (21/65) [ Problem ] 给 ...
- Redis 锁的实现方案
开发中不可避免的是碰到并发请求,在数据严谨性的要求不高时,我们也不需要做什么处理,但如果碰到数据严谨性非常高的时候(例如:用户金额,秒杀产品的库存...),我们就需要慎重处理了. 解决方案多种多样,下 ...
- Problem B: 深入浅出学算法003-计算复杂度
Description 算法复杂度一般分为:时间复杂度.空间复杂度.编程复杂度. 这三个复杂度本身是矛盾体,不能一味地追求降低某一复杂度,否则会带来其他复杂度的增加.在权衡各方面的情况下,降低时间复杂 ...
- Unity 播放音频文件
Unity 播放音频文件参考代码: public void Play(string strSoundName, float autoDestroyTime = 0f, bool bLoop = fal ...
- 51NOD 1179 最大的最大公约数 筛法
1179 最大的最大公约数 题目连接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1179 Description ...
- Codeforces Round #301 (Div. 2) A. Combination Lock 暴力
A. Combination Lock Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/540/p ...