当前位置: 首页 > news >正文

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等等

四、

包含的功能:

1. 发送异步http请求,在匿名callback对象中处理response;
 
2. http请求发生在UI线程之外;
 
3. 内部采用线程池来处理并发请求;
 
4. GET/POST 参数构造,通过RequestParams类。
 
5. 内置多部分文件上传,不需要第三方库支持;
 
6. 流式Json上传,不需要额外的库;
 
7. 能处理环行和相对重定向;
 
8. 和你的app大小相比来说,库的size很小,所有的一切只有90kb;
 
9. 自动智能的请求重试机制在各种各样的移动连接环境中;
 
10. 自动的gzip响应解码;
 
11. 内置多种形式的响应解析,有原生的字节流,string,json对象,甚至可以将response写到文件中;
 
12. 永久的cookie保存,内部实现用的是Android的SharedPreferences;
 
13. 通过BaseJsonHttpResponseHandler和各种json库集成;
 
14. 支持SAX解析器;
 
15. 支持各种语言和content编码,不仅仅是UTF-8。

转载于:https://www.cnblogs.com/zhou-guobao/p/4650588.html

相关文章:

  • 指定索引
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • 这个世界并不亏欠我们什么——Leo网上答疑52
  • 《python核心编程》笔记——文件的创建、读取和显示
  • 详解TCC89x的LCD数值设置
  • gentoo系统安装
  • 你为什么不写注释?
  • GO语言练习:网络编程 TCP 示例
  • “梳子”的用途很大
  • Linux监控本机当前状态命令
  • eclipse中svn的各种状态图标详解
  • 201507221403_《backbone之一——新建模型和集合、实例化模型、模型上监听事件的方法、模型设置和获取后台数据、配置理由方法、视图绑定事件的方法、绑定模型等》...
  • Android HAL实例解析
  • 15款优秀移动APP产品原型设计工具
  • ThreadPoolExecutor运转机制详解
  • 分享一款快速APP功能测试工具
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • Cookie 在前端中的实践
  • DataBase in Android
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • javascript面向对象之创建对象
  • MobX
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 高程读书笔记 第六章 面向对象程序设计
  • 利用jquery编写加法运算验证码
  • 如何利用MongoDB打造TOP榜小程序
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • $.ajax,axios,fetch三种ajax请求的区别
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (03)光刻——半导体电路的绘制
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (二)Linux——Linux常用指令
  • (过滤器)Filter和(监听器)listener
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net 后台导出excel ,word
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .NET学习全景图
  • @RequestBody与@ResponseBody的使用
  • [20161101]rman备份与数据文件变化7.txt
  • [20170728]oracle保留字.txt
  • [Android]使用Retrofit进行网络请求
  • [bzoj1324]Exca王者之剑_最小割
  • [C]编译和预处理详解
  • [Codeforces1137D]Cooperative Game
  • [Django 0-1] Core.Handlers 模块
  • [emacs] CUA的矩形块操作很给力啊
  • [IE9] IE9 beta版下载链接