文档章节

如何实现网络请求?

枫TI
 枫TI
发布于 2017/05/07 12:43
字数 620
阅读 8
收藏 0
点赞 0
评论 0

做Android有些年头了,第一份工作是在一家手机电视-Dopool公司工作的。那时主流SDK还是9(现在已经25了)。主要工作内容,界面绘制,熟练使用ListView、GridView等一系列常用的的系统控件,当然自己也自定义过View--弧形进度条。网络接口已经由公司牛人封装好了,负责调用接口解析数据就行,数据格式还是xml,现在Json大行其道了。专注UI,无暇网络。

相比第一份工作干了一年,第二份工作显得稍微长了一些,四年时间用心做一款产品。相比上一家公司的工作,最大的不同是,创业公司,一行代码都没有,所有接口自己写。

算是独立开发APP的开始,UI方面是没什么大问题的,网络模块没接触过,就从API开始吧。

Httpclient,现在已被Android启用。有些公司拿这个当作一个考查点,考查面试者,感觉很无聊,中国式的教育。由于Httpclient过于庞大,使得很难在不破坏兼容性的基础上进行修改。 Android开发团队也不积极致力于的 Apache HTTP Client的开发工作。

既然Httpclient已经被启用了,那就找替代者吧,官方推荐HttpURLConnection API简便而且包小,对安卓很合适。HttpURLConnection 对于提高请求速度和节省电池有帮助,同时谷歌也愿意在这方面花时间研究去更进一步的提高性能。

项目中的网络请求核心代码如下:

URL url = new URL(uri);

// 网络请求,这是一个阻塞方法

HttpsURLConnection https = (HttpsURLConnection)url.openConnection();

HttpURLConnection  conn = https;

 

URL url = new URL(uri);

// 网络请求,这是一个阻塞方法

HttpURLConnection conn = (HttpURLConnection)url.openConnection();

在此基础上添加请求Header及元数据就行了。

 

下载文件代码一:

HttpGet httpRequest = new HttpGet(downloadUrl);

HttpParams params = new BasicHttpParams();

ClientConnectionManager ccm ;

HttpClient sHttpClient = new DefaultHttpClient(ccm, params);

// 网络请求,这是一个阻塞方法

HttpResponse httpResponse = mHttpClient.execute(httpRequest);

String contentType = httpResponse.getEntity().getContentType().getValue();

int httpReturnStatusCode = httpResponse.getStatusLine().getStatusCode();

if (200 == httpReturnStatusCode && contentType.contains("application/x-download")) {

    InputStream input = httpResponse.getEntity().getContent();

}

下载文件代码二:

URL url = new URL(url);
HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
httpConnection.setRequestProperty("User-Agent", "NetFox");
httpConnection.setReadTimeout(60000);

//支持断点下载

httpConnection.setRequestProperty("RANGE", "bytes=" + 已下载文件的大小  + "-");

// 网络请求,这是一个阻塞方法

InputStream input = httpConnection.getInputStream();

 

 

 

未完结...

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
枫TI
粉丝 13
博文 84
码字总数 42755
作品 2
东城
dubbo剖析:七 网络通信总结

注:文章中使用的dubbo源码版本为2.5.4 零、文章目录 Dubbo的网络分层抽象 Dubbo如何保证Client端与Server端的连通性 Dubbo的请求响应模式,如何将异步IO变为同步RPC Dubbo线程模型总结 一、...

益文的圈 ⋅ 05/13 ⋅ 0

Android 网络请求框架--asyncHttp

AsyncHttp 一款为android 网络请求的框架,采用最少的线程,基于AsyncPool 线程池实现的 http请求,支持 post和 get、delete等多种请求,实现请求任务和结果异步获取,支持初中高级开发人员各...

非著名程序員ML ⋅ 2016/12/04 ⋅ 0

ActiveMQ实现简单集群和HA

先做一个简单说明,我这个版本的ActiveMQ集群部署并不严谨,对于大型企业可能并不适用,如有意见或者建议欢迎留言交流。 1. 集群架构 **一言不合就直接上架构图 ** 1. 集群采用两台机器,四个...

醉公子 ⋅ 2016/07/22 ⋅ 0

深入理解OkHttp源码及设计思想

用OkHttp很久了,也看了很多人写的源码分析,在这里结合自己的感悟,记录一下对OkHttp源码理解的几点心得。 整体结构 网络请求框架虽然都要做请求任务的封装和管理,但是最大的难点在于网络请...

蓝灰_q ⋅ 2017/12/02 ⋅ 0

从架构角度看Retrofit的作用、原理和启示

Retrofit是squareup公司的开源力作,和同属squareup公司开源的OkHttp,一个负责网络调度,一个负责网络执行,为Android开发者提供了即方便又高效的网络访问框架。 不过,对于Retrofit这样设计...

蓝灰_q ⋅ 2017/10/28 ⋅ 0

漫谈Android网络编程

Android从业者,十之八九都是在做网络应用,不是互联网也是局域网。如今在4G和Wifi的天下下,流量什么的都已是浮云,单机应用的市场已然悄悄的一去不复返了。所以呢,不了解网络请求的同学要...

Jack_1900 ⋅ 2014/07/21 ⋅ 0

Neutron 架构 - 每天5分钟玩转 OpenStack(67)

前面我们讨论了 Neutron 的基本概念,今天我们开始分析 Neutron 的架构。 Neutron 架构 与 OpenStack 的其他服务的设计思路一样,Neutron 也是采用分布式架构,由多个组件(子服务)共同对外...

CloudMAN ⋅ 2016/08/01 ⋅ 0

Retrofit2.0结合RxAndroid实现二次封装

实Retrofit2.0结合RxAndroid现网络请求网上有很多文章,这里不再详细介绍 Retrofit基本是一个业务请求,对应一个接口方法,因为其返回值不支持泛型,只能是具体的类。好处是结构清楚,缺点是...

xingjm8511 ⋅ 2016/04/29 ⋅ 0

Retrofit用法详解

一、 简介 Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求,其源码详见O...

postdep ⋅ 2016/11/13 ⋅ 0

dubbo 视频教程

深度解剖dubbo源码 为什么要学习dubbo 源码? 1.如果你想深入学习SOA的微服务架构设计,那通过读dubbo源码是一条非常不错的通往SOA架构设计之路,毕竟SOA的服务治理就是dubbo首先提出来的,比...

qq594295b3c16b8 ⋅ 2017/06/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Cube、Cuboid 和 Cube Segment

1.Cube (或Data Cube),即数据立方体,是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。通过 Cube 对数据进行分析,可以大大加快数据的查询效率 2.Cuboid 在 Kylin 中特...

无精疯 ⋅ 21分钟前 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 23分钟前 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 33分钟前 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 36分钟前 ⋅ 0

我的第一篇个人博客

虽然这是个技术博客,但是,我总是想写一些自己的东西,所有就大胆的在这里写下了第一篇非技术博客。技术博客也很久没有更新,个人原因。 以后自己打算在这里写一些非技术博客,可能个人观点...

Mrs_CoCo ⋅ 36分钟前 ⋅ 0

Redis 注册为 Windows 服务

Redis 注册为 Windows 服务 redis 注册为 windows 服务相关命令 注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 启动服务 re......

Os_yxguang ⋅ 37分钟前 ⋅ 0

世界那么大,语言那么多,为什么选择Micropython,它的优势在哪?

最近国内MicroPython风靡程序界,是什么原因导致它这么火呢?是因为他功能强大,遵循Mit协议开源么? 错!因为使用它真的是太舒服了!!! Micropython的由来,这得益于Damien George这位伟大...

bodasisiter ⋅ 40分钟前 ⋅ 0

docker 清理总结

杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器(docker rm没有加-f参数,运行中的容器不会删掉) docker rm $(docker ps -a -q) 删除所有未打 dangling 标...

vvx1024 ⋅ 50分钟前 ⋅ 0

关于学习

以前学车的时候,教练说了这样的一句话:如果一个人坐在车上一直学,一直学,反而不如大家轮流着学。因为一个人一直学,就没有给自己留空间来反思和改进。而轮流着学的时候大家下来之后思考上...

mskk ⋅ 54分钟前 ⋅ 0

压缩工具之gzip-bzip2-xz

win下常见压缩工具:rar zip 7z linux下常见压缩工具:zip gz bz2 xz tar.gz tar.bz2 tar.xz gzip 不支持目录压缩 gzip 1.txt #压缩。执行后1.txt消失,生成1.txt.gz压缩文件 gzip -d 1.txt....

ZHENG-JY ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部