文档章节

如何实现网络请求?

枫TI
 枫TI
发布于 2017/05/07 12:43
字数 620
阅读 9
收藏 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
0
谈谈如何设计一个 Network->Model 组件

大多数 APP 都需要向服务器请求数据,一般来说,一个 APP 只需要根据一个后台设计一套网络请求的封装即可。但是在开发工作中,可能一个 APP 需要接入其他产线的功能,甚至有可能同一个后台返...

薛定諤
09/01
0
0
Android 网络请求框架--asyncHttp

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

非著名程序員ML
2016/12/04
363
0
ActiveMQ实现简单集群和HA

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

醉公子
2016/07/22
162
0
Hybrid 实战:如何完整下载一个 wap 页面

本文的读者需要有一定的 Hybrid 基础,相关的概念已经有很多优秀的文章进行过讲解,这里不再赘述。本文的重点在于如何基于 Hybrid 框架,在移动端(不限于具体平台)完成一个 wap 页面的完整...

halohily
09/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
42分钟前
1
0
OSChina 周四乱弹 —— 上帝对我单身年限的惩罚越来越长了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享张卫健的单曲《身体健康》 《身体健康》- 张卫健 手机党少年们想听歌,请使劲儿戳(这里) 昨天是重阳节咯, 可惜小小编辑总是晚...

小小编辑
44分钟前
7
0
django rest framework 外键序列化方法与问题总结

django rest framework 外键序列化方法与问题总结 当借口中需要出现一对多关系的时候,我们可以用rest_framwork的序列化功能来处理,代码如下. # models.pyfrom django.db import modelscl...

_Change_
昨天
1
0
SingleNumber136 leetCode

Given a non-empty array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you im......

woshixin
昨天
1
0
String ,  StringBuffer ,  StringBuilder的区别

String , StringBuffer , StringBuilder的区别 String 首先,String 是用来表示一个字符串常量的,它是一个不可变对象,意味着,一旦我们创建了某个字符串之后,就不能再改变它的值了,我们可...

tsmyk0715
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部