android 网络交互
一、
在Android中,发送和处理http请求实在太常见了,以至于我们经常需要写这方面的代码。
Android中网络交互的代码不能在UI线程中执行,只能在额外的子线程中执行。
我一般的做法是通过创建子线程和Handler来完成,网络交互的代码在线程中执行,交互的结果通过Handler反馈给UI线程。
new Thread(){
public void run() {
//http请求的发送与接收代码
//将操作接口通过handler通知页面
};
}.start();
还有一种交互的方式是通过回调函数callback来实现。
二、
发现了一个网络交互的库:android-async-http,前段时间尝试着用了一下,感觉挺棒的。
这个库,他网络交互的代码都已经封装在里面,通常一个http请求只需要简单的几行代码即可完成。
它与UI交互的方式是通过回调函数callback来实现,内容比较完成,其中网络交互的开始,结束,成功,失败,进度等等都可以通过callback得到
第一步:得到httpclient对象
AsyncHttpClient client = new AsyncHttpClient(); //这一步可以我们自己封装成单例模式
第二步:发送get请求
client.get(url.toString(), responseHandler);
//这个地方的responseHandler,假如我们需要得到这个请求的相关返回值,就需要重写实现这个类,并且重写其中的方法;假如不需要的话,使用null代替即可
JsonHttpResponseHandler responseHandler = new JsonHttpResponseHandler(){
public void onSuccess(int statusCode, org.apache.http.Header[] headers, org.json.JSONObject response) {
super.onSuccess(statusCode, headers, response);
}; public void onFailure(int statusCode, org.apache.http.Header[] headers, Throwable throwable, org.json.JSONObject errorResponse) {
super.onFailure(statusCode, headers, throwable,
};
@Override
public void onFinish() {
super.onFinish();
};
//还有很多其他可以重写的方法,基本包括交互过程中所有的状态
}
三、
觉得这个库写的很棒,各种高大上,简单的读了一下其中的源码,他在github上是开源的。
每一个请求,都被封装在一个runnable中,执行这个请求的时候,ExecutorService.submit(runnable)将该runnable放在线程池中执行
根据用户提供的网络路径和键值对,创建HttpUriRequest对象,通过HttpResponse response = client.execute(HttpUriRequest, httpContext)来执行网络操作
HttpUriRequest,它是一个接口,它有多个子类,其中包含HttpEntityEnclosingRequestBase;HttpEntityEnclosingRequestBase包含setURI()和setEntity(HttpEntity entity) 的方法。
请求发送之后,该方法会返回一个叫RequestHandle的对象,通过该对象的cancel方法,可以实现取消请求的方法
这里只是对库里面的主要方法进行描述,其中还有很多其他的内容,比如gzip,比如base64等等
四、
包含的功能:
android 网络交互的更多相关文章
- android网络交互之DNS优化知识整理
android网络交互之DNS优化知识整理 之前的工作中,经常会遇到DNS解析出问题导致网络交互的操作无法正常进行. UnknownHostException 在很多的移动开发过程中,与服务端的交互的 ...
- Android 网络交互之MD5为什么要加盐
MD5为什么要加盐 之前面试的时候,遇到一个面试的哥哥.不停的跟我确认我对网络传输过程中的password进行MD5加密的时候,是否加key了. 当时我很纳闷,因为MD5本身已经是不可逆的了,需要破解 ...
- Android 网络交互之下载断点续传
一.概述 1.概念 断点续传主要用于下载,本文也主要讲述下载时的断点续传的逻辑思路.顾名思义,断点续传就是下载从中断的地方继续下载,一般是因为暂停或者网络故障导致的下载中断,当恢复下载的时候可以从已经 ...
- Android 网络交互之移动端与服务端的加密处理
在开发项目的网络模块时,我们为了保证客户端(Client)和服务端(Server)之间的通信安全,我们会对数据进行加密. 谈到网络通信加密,我们可以说出:对称加密,非对称加密,md5单向加密,也能提到 ...
- Servlet和Android网络交互基础(3)
在上一章中採用了最简单的创建service端代码方式,但在实际开发中一般都会採用比較成熟的框架.以下是完整的maven+spring mvc 创建service的方式 下载安装Eclipse 和jdk ...
- SSM + Android 网络文件上传下载
SSM + Android 网络交互的那些事 2016年12月14日 17:58:36 ssm做为后台与android交互,相信只要是了解过的人都知道一些基本的数据交互,向json,对象,map的交互 ...
- Android网络(3):HttpClient作client,Tomcat Servlet作server的交互演示样例
前面相继介绍了Android网络编程里的Socket传输图片.HttpURLConnection,今天看HttpClient. 第一部分:JavaEE版的Eclipse配置Tomcat [备注:开发后 ...
- Android网络请求框架
本篇主要介绍一下Android中经常用到的网络请求框架: 客户端网络请求,就是客户端发起网络请求,经过网络框架的特殊处理,让后将请求发送的服务器,服务器根据 请求的参数,返回客户端需要的数据,经过网络 ...
- 6、android 网络编程
1.基于socket的用法 服务器端: 先启动一个服务器端的socket ServerSocket svr = new ServerSocket(8989); 开始侦听请求 Socket s ...
随机推荐
- innerText和innerHTML的区别
innerhtml用法 innertext用法 以及innerHTML与innertext的区别,看完这个大家以后在实际应用中,就可以选择合适的方法.尽可能的考虑到兼容性. test.innerHTM ...
- WLAN和WIFI的区别
在刚刚为大家介绍的wifi上网是什么意思?文章中为大家介绍了什么wifi无线上网,但大家可能会有这样的疑问,听说最多的应该是WLAN无线上网,很多笔记本电脑使用的都是WLAN无线上网,那么wlan和w ...
- nodejs hello world (调用文件执行没反应)
今天学习了node.js ,来看一下hello world 的写法. 1. 首先安装node.js的驱动文件.http://nodejs.org/ 2. a:安装好node之后,在CMD窗口输入nod ...
- 第2章 Python基础语法 -- 数据类型
2.2数据类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 2.2.1 标准数据类型 在内存中存储 ...
- NAS简介
转自IBM资料库:https://community.emc.com/docs/DOC-15977 在20世纪80年代初,英国纽卡斯尔大学布赖恩.兰德尔教授 ( Brian Randell)和同事通过 ...
- poj 2480 Longge's problem
/** 大意: 计算f(n) = ∑ gcd(i, N) 1<=i <=N. 思路: gcd(i,x*y) = gcd(i,x) * gcd(i, y ) 所以gcd 为积性函数 又因为积 ...
- 0课程介绍(Week1,3月3日)
一.自我介绍 1.姓名:杨晔 2.办公室:B211-2 3.电子邮件:yangye@zjjy.com.cn 4.QQ:6706892 5.博客:http://www.cnblogs.com/meety ...
- python 中函数参数传递形式
python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...
- 从零开始学C++之IO流类库(四):输出流格式化(以操纵子方式格式化 以ios类成员函数方式格式化)
一.以操纵子方式格式化 数据输入输出的格式控制使用系统头文件<iomanip>中提供的操纵符.把它们作为插入操作符<<的输出对象即可.如setiosflags.setw.set ...
- 关于闹钟设置AlarmManager类方法参数解释
1.AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,可以实现从指定时间开始,以一个固定的间隔时间执行某项操作,所以常常与广播(Broadcast)连用 ...