做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();
未完结...