Android客户端连接服务器- OKHttp的简单实用方法


**写在前面:本文只是对OKHttp3的简单实用方法介绍,**网络上有很多类似的文章介绍,而且基于OKHttp封装的工具类也有不少,比如:
鸿洋大神的 [Android 一个改善的okHttp封装库][Android OkHttp完全解析 是时候来了解OkHttp了]以及 [Android Https相关完全解析 当OkHttp遇到Https

还有凯子哥的开源项目OkHttpPlus——支持GET、POST、UI线程回调、JSON格式解析、链式调用、文件上传下**

一 、OKHttp简介

OKHttp是一个处理网络请求的开源项目,Android 当前最火热网络框架,由移动支付Square公司贡献(该公司还贡献了Picasso) ,OKHttp用于替代HttpUrlConnection和HttpClient(android API23 6.0里已移除HttpClient,现在代码提示已经画横线了或者直接打不出来)

OkHttp官网地址:https://square.github.io/okhttp/

官网介绍:
OkHttp works on Android 5.0+ (API level 21+) and on Java 8+.
HTTP is the way modern applications network. It’s how we exchange data & media. Doing HTTP efficiently makes your stuff load faster and saves bandwidth.

OkHttp is an HTTP client that’s efficient by default:

  • HTTP/2 support allows all requests to the same host to share a socket.
  • Connection pooling reduces request latency (if HTTP/2 isn’t available).
  • Transparent GZIP shrinks download sizes.
  • Response caching avoids the network completely for repeat requests.>

Using OkHttp is easy. Its request/response API is designed with fluent builders and immutability. It supports both synchronous blocking calls and async calls with callbacks.

功能

  1. get,post请求
  2. 文件的上传下载
  3. 加载图片(内部会图片大小自动压缩)
  4. 支持请求回调,直接返回对象、对象集合
  5. 支持session的保持

二、 OkHttp3使用

(一)添加OkHttp依赖文件和网络访问权限。
在这里插入图片描述在这里插入图片描述
添加网络访问权限

<uses-permission android:name="android.permission.INTERNET"/>

1.创建HTTPClient实例

简单来说,通过OkHttpClient可以发送一个Http请求,并读取该Http请求的响应,它是一个生产Call的工厂。
此外,受益于一个共享的响应缓存/线程池/复用的连接等因素,绝大多数应用使用一个OkHttpClient实例,便可以满足整个应用的Http请求。

三种创建实例的方法:

// 第一种方法:创建一个默认配置OkHttpClient,可以使用默认的构造函数。

OkHttpClient client = new OkHttpClient();

// 第二种方法:通过new OkHttpClient.Builder()方法来一步一步配置一个OkHttpClient实例。

OkHttpClient clientWith30sTimeout = client.Builder()
    .readTimeout(30, TimeUnit.SECONDS)
    .build();

// 第三种方法: 如果要求使用现有的实例,可以通过newBuilder()方法来进行构造。

OkHttpClient client  = client.newBuilder().build();

2.Get请求

2.1同步GET请求

String url = "http://wwww.baidu.com";
OkHttpClient okHttpClient = new OkHttpClient();
final Request request = new Request.Builder()
        .url(url)
        .build();
final Call call = okHttpClient.newCall(request);
new Thread(new Runnable() {
   
    @Override
    public void run() {
   
        try {
   
            Response response = call.execute();
            Log.d(TAG, "run: " + response.body().string());
        } catch (IOException e) {
   
            e.printStackTrace();
        }
    }
}).start();

2.2异步GET请求

//1.创建OkHttpClient对象
  OkHttpClient okHttpClient = new OkHttpClient();
  //2.创建Request对象,设置一个url地址(百度地址),设置请求方式。
  Request request = new Request.Builder().url("http://www.baidu.com").method("GET",null).build();
  //3.创建一个call对象,参数就是Request请求对象
  Call call = okHttpClient.newCall(request);
  //4.请求加入调度,重写回调方法
  call.enqueue(new Callback() {
   
      //请求失败执行的方法
      @Override
      public void onFailure(Call call, IOException e) {
   
      }
      //请求成功执行的方法
      @Override
      public void onResponse(Call call, Response response) throws IOException {
   
      }
  });

注意事项:

  1. 同步GET请求和异步GET请求基本一样,不同地方是同步请求调用Call的execute()方法,而异步请求调用call.enqueue()方法
  2. 异步调用的回调函数是在子线程,我们不能在子线程更新UI,需要借助于 runOnUiThread() 方法或者 Handler 来处理。
  3. 请求成功执行onResponse回调,有一个参数是response
    如果我们想获得返回的是字符串,可以通过response.body().string()获取;
    如果希望获得返回的二进制字节数组,则调用response.body().bytes()
    如果你想拿到返回的inputStream,则调response.body().byteStream()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值