Android 网络请求框架

 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来完成网络操作

  • 特点
  1. 自动调度网络请求
  2. 支持并发网络连接,支持单个或多个请求
  3. 支持标准的HTTP缓存
  4. 支持请求的优先级
  5. 提供调试和跟踪工具

优点:

  1. 支持任意的数据传输格式(图片,字符串,json以及自己定义的数据格式),速度快

缺点:

    由于是在内存中解析和处理数据,不适合大量数据的下载-------如果想要下载大的文件可以使用系统的DowloadManager

   

原文地址:https://www.cnblogs.com/fanfusuzi/p/6765249.html