文档章节

如何实现网络请求?

枫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
东城
私信 提问
谈谈如何设计一个 Network->Model 组件

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

薛定諤
10/30
0
0
dubbo剖析:七 网络通信总结

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

益文的圈
05/13
0
0
ip代理软件是什么?哪一个ip代理性价比会高一点?

什么是ip代理软件? IP代理软件:也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器...

犀牛小牛
12/04
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

没有更多内容

加载失败,请刷新页面

加载更多

selenium 结合 docker 构建分布式测试环境

随着自动化测试越学越深,深深觉得有太多的东西需要总结。 1.记录下学习中遇到的坑,当做学习笔记。 2.有前人路过看到文章中比较落后的做法,请务必一定要指教。(因为是初学者视角,很多东西...

呐呐丶嘿
15分钟前
1
0
PostgreSQL 安装启动使用一条龙教程——Ubuntu 16.04

今天想尝试下 PostgreSQL,分享一下在 Ubuntu 16.04 下安装启动使用 PostgreSQL 一条龙方法。 添加第三方 apt 仓库: sudo add-apt-repository "deb http://apt.postgresql.org/pub/repos/a...

宇润
16分钟前
2
0
对于json文件的读写操作

对json文件的读操作 返回的一个列表,里面是多个字典 def read_json(self,jsonname): with open(r"./{}.json".format(jsonname),"r") as json_f: text_list = json......

鹏灬
18分钟前
2
0
Date-Time API简介

  Date-Time API简介      在Java8之前的版本中,我们处理时间类型常常使用的是java.util包下的Date类。但使用Date类却有诸多的弊端,如: java.util.Date 是非线程安全的,所有的日期...

SEOwhywhy
19分钟前
2
0
实体类生成对应的建表语句

通过实体类生成对应的建表语句 用java代码根据实体类自动生成对应的建表语句或生成某个包下的所有类的建表语句 根据实体类反射生成SQL java 根据实体对象生成 增删改的SQL语句 ModelToSQL...

miaojiangmin
22分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部