文档章节

如何实现网络请求?

枫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
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
深入理解OkHttp源码及设计思想

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

蓝灰_q
2017/12/02
0
0
从架构角度看Retrofit的作用、原理和启示

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

蓝灰_q
2017/10/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

HTTPS is easy

HTTPS is easy https://www.troyhunt.com/https-is-easy/ HTTPS is easy! In fact, it's so easy I decided to create 4 short videos around 5 minutes each to show people how to enable ......

openthings
16分钟前
0
0
bugList 2

用户端: 1. 上传文件时,当选择:彩色-A3-双面时,第二个图片有bug 应改为 和第一个图片的类型相同 2. 确认打印时,三个下拉选目前有bug 应改为:根据后台配置的商家,group by计算出不同城...

勇恒
18分钟前
2
0
keras cnn 网咯 mnist 分类

搭建貌似比tf是简单很多。。。。。 from keras.datasets import mnistfrom keras.utils import np_utilsfrom keras.models import Sequentialfrom keras.layers import Dense, Activat......

阿豪boy
21分钟前
0
0
解决 /var/run/nginx.pid failed

nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory) sudo nginx -c /etc/nginx/nginx.conf nginx -s reload...

驛路梨花醉美
22分钟前
0
0
nginx负载均衡-ssl原理-生成ssl密钥对-nginx配置ssl

nginx负载均衡: 1.创建配置文件 vim /usr/local/nginx/conf/vhost/load.conf #添加以下内容: upstream qq_com #名字自定义,借助此模块定义多个IP,后面...

ZHENG-JY
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部