1.okHttp
- 特点
简单、灵活、无连接、无状态
优势:
- 谷歌官方API在6.0之后在Android SDK中移除了HttpClient,然后他火了起来,
- 他支持SPDY(谷歌开发的基于TCP应用层协议增强的http协议),允许连接同一主机的所有请求分享一个socket,如果SPDY不可用,会使连接池减少请求延迟,
- 使用GZIP压缩下载内容,并且压缩操作是透明的,利用响应缓存来避免重复的网络请求。
- 当网络出现问题,okhttp依然有效,他将从常见的连接问题当中回复,如果服务器有多个ip地址,当一个ip地址连接失败,会尝试连接其他的地址,这对ipV4和ipV6以及寄宿在多个数据中心的服务而言,很有必要。
- get请求
- post请求
- 基于Http的文件上传
- 文件下载
- 加载图片
- 支持请求回调,直接返回对象、对象集合
- 支持session的保持
使用步骤:
0.添加依赖
1.创建OKHttpClient实例
mOkHttpClient = new OkHttpClient();
2.构建request|,build是辅助类
mGetRequest = new Request.Builder().url(Constants.GET_URL).build();
3.获取网络请求
Call call = mOkHttpClient.newCall(mGetRequest);4.执行网络请求
(同步异步:同步不会开启线程,需要去开启,否则报异常,异步会开启子线程)
Response response = call.execute();5.获取response,处理响应结果
if (response.isSuccessful()) { 22. String reponseStr = response.body().string(); 23. Log.e(TAG, "同步GET请求成功 ===========" + reponseStr); 24. } else { 25. Log.e(TAG, "同步GET请求失败 ===========, code = " + response.code()); 26. }
4.异步:
call.enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { Log.e(TAG, "异步GET请求失败 ===========, code = " + e.getMessage()); } @Override public void onResponse(Response response) throws IOException { // 5.处理响应的结果 if (response.isSuccessful()) { String reponseStr = response.body().string(); Log.e(TAG, "异步GET请求成功 ===========" + reponseStr); } else { Log.e(TAG, "异步GET请求失败 ===========, code = " + response.code()); } } });
2.Volley
在进行网络通信时,一般使用AsyncTask,AsyncTaskLoader,HttpURLConnection,HttpClient等,在2013年提出了新的网络通信框架Volley。
Volley 在android 2.3以上版本使用HttpURLConnection完成网络操作
在Android 2.3以下版本使用HttpClient来完成网络操作
- 特点
- 自动调度网络请求
- 支持并发网络连接,支持单个或多个请求
- 支持标准的HTTP缓存
- 支持请求的优先级
- 提供调试和跟踪工具
优点:
- 支持任意的数据传输格式(图片,字符串,json以及自己定义的数据格式),速度快
缺点:
由于是在内存中解析和处理数据,不适合大量数据的下载-------如果想要下载大的文件可以使用系统的DowloadManager