OkHttp基本使用

  OkHttp介绍
  
  Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient,HttpURLConnection相对来说比HttpClient难用,google自从2.3版本之后一直推荐使用HttpURLConnection,并且在6.0版本的sdk中直接删掉了HttpClient类。
  
  但是, 上面两个类库和OkHttp比起来就弱爆了, 因为OkHttp不仅具有高效的请求效率,并且节省宽带, 还提供了很多开箱即用的网络疑难杂症解决方案.(据说Android4.4的源码中可以看到OkHttp替换了HttpURLConnection)
  
  支持HTTP/2, HTTP/2通过使用多路复用技术在一个单独的TCP连接上支持并发, 通过在一个连接上一次性发送多个请求来发送或接收数据
  
  如果HTTP/2不可用, 连接池减少请求延迟
  
  支持GZIP, 可以压缩下载体积
  
  响应缓存可以避免重复请求网络
  
  会从很多常用的连接问题中自动恢复,如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP
  
  OkHttp还处理了代理服务器问题和SSL握手失败问题
  
  OkHttp基本使用
  
  概述
  
  前面的内容介绍了OkHttp,本章就来教大家okhttp的基本使用,学了这些基本东西之后,大家有其他的需求可以自行扩展。以下的所有请求都是异步请求服务器,在真实的企业开发中,基本都是异步。
  
  get请求
  
  post请求
  
  文件上传
  
  依赖
  
  Android Studio可以在线依赖,在app/build.gradle文件中加上下面这句话就行
  
  compile ‘com.squareup.okhttp3:okhttp:3.8.0‘
  
  1
  
  1
  
  get请求
  
  首先需要创建一个全局的OkHttpClient对象,所有的Http请求都共用这个对象就行。
  
  private OkHttpClient client = new OkHttpClient();
  
  1
  
  1
  
  一般从服务器获取信息的接口都是get请求,这里我们调用获取用户信息接口。
  
  private void getUserInfo(){
  
  //创建一个Request
  
  Request.Builder builder = new Request.Builder().url("http://139.196.35.30:8080/OkHttpTest/getUserInfo.do");
  
  execute(builder);
  
  }
  
  //执行请求
  
  private void execute(Request.Builder builder){
  
  Call call = client.newCall(builder.build());
  
  call.enqueue(callback);//加入调度队列
  
  }
  
  //请求回调
  
  private Callback callback=new Callback(){
  
  @Override
  
  public void onFailure(Call call, IOException e) {
  
  Log.i("MainActivity","onFailure");
  
  e.printStackTrace();
  
  }
  
  @Override
  
  public void onResponse(Call call, Response response) throws IOException {
  
  //从response从获取服务器返回的数据,转成字符串处理
  
  String str = new String(response.body().bytes(),"utf-8");
  
  Log.i("MainActivity","onResponse:"+str);
  
  //通过handler更新UI
  
  Message message=handler.obtainMessage();
  
  message.obj=str;
  
  message.sendToTarget();
  
  首先创建一个request对象,通过request设置请求url,通过这个类还可以设置更多的请求信息。
  
  然后通过Request去构造一个Call对象。
  
  调用enqueue执行异步请求,有一个参数设置回调。请求成功或者失败会调用Callback接口的onResponse跟onFailure方法,因为这是异步请求,在回调方法中是不能直接更新UI,所以我们需要通过Handler去更新UI。
  
  handler的代码很简单,就是把请求的结果显示在TextView上
  
  private Handler handler=new Handler(){
  
  @Override
  
  public void handleMessage(Message msg) {
  
  String result= (String) msg.obj;
  
  tvResult.setText(result);
  
  }
  
  Post请求
  
  通过调用登录接口发送一个post请求。跟get不一样的地方就是传参数不一样,post请求需要把参数封装到RequestBody对象,调用Request对象的post方法把RequestBody传入进去。最后调用execute方法执行请求,这个方法前面get请求的时候讲过。
  
  private void login(){
  
  //把请求参数封装到RequestBody里面
  
  FormBody.Builder formBuilder = new FormBody.Builder();
  
  formBuilder.add("username","ansen");//请求参数一
  
  formBuilder.add("password","123");//请求参数二
  
  RequestBody requestBody = formBuilder.build();
  
  Request.Builder builder = new Request.Builder().url("http://139.196.35.30:8080/OkHttpTest/login.do").post(requestBody);
  
  execute(builder);
  
  文件上传
  
  上传文件需要用到MultipartBody对象,通过调用addFormDataPart方法添加表单参数,通过setType方法设置内容类型,这边设置form表单类型,调用自己的getUploadFileBytes方法获取文件byte数组,通过addFormDataPart方法添加文件,后面的流程跟之前的post请求一样。
  
  private void uploadFile(){
  
  MultipartBody.Builder builder = new MultipartBody.Builder();
  
  builder.addFormDataPart(http://www.acnet.cn/"username", "ansen");//表单参数
  
  builder.addFormDataPart(www.sb45475.com "password", "123456");//表单参数
  
  builder.setType(MultipartBody.FORM);
  
  MediaType mediaType = MediaType.parse("application/octet-stream");
  
  byte[] bytes=getUploadFileBytes();//获取文件内容存入byte数组
  
  //上传文件 参数1:name 参数2:文件名称 参数3:文件byte数组
  
  builder.addFormDataPart("upload_http://www.22yigouyule.cn/ file", "ansen.txt",RequestBody.create(mediaType,bytes));
  
  RequestBody requestBody = builder.build();
  
  Request.Builder requestBuider = new Request.Builder(www.22yigouyule.cn/);
  
  requestBuider.url("http://139.196.huazongyulept.cn 35.30:8080/OkHttpTest/uploadFile.do");
  
  requestBuider.post(requestBody);
  
  execute(requestBuider);
  
  如何证明文件有上传到服务器呢?打开浏览器,输入下面这个地址,就能看到文件内容了。如果是本地服务器记得把139.196.35.30改成localhost。
  
  http://139.196.35.30:8080/http://xucaizxyl.com/ OkHttpTest/upload/ansen.txt
  
  1
  
  1
  
  通过http协议请求服务器数据,常用的就这几种请求,如果有特殊需求自己扩展。例如:下载文件,从服务器下载图片等。。。。
  
  服务器接口
  
  这三个接口的服务器代码是我自己用Java web写的,开发工具用的是IntelliJ IDEA,服务器是tomcat,我部署在云上了,139.196.35.30是我的云服务器的外网ip,大家测试也方便。服务器代码我放github上了,如果你想扩展接口,或者想看源码都很方便。
  
  源码下载
  
  服务器源码
  
  Android客户端源码

时间: 2024-10-13 21:29:27

OkHttp基本使用的相关文章

Rxjava+ReTrofit+okHttp深入浅出-终极封装

Rxjava+ReTrofit+okHttp深入浅出-终极封装 背景: 学习Rxjava和retrofit已经很长时间了,功能确实很强大,但是使用起来还是有点复杂,代码的重复性太高,所以决定把基于retrofit和rxjava的处理统一封装起来,实现的功能: 1.Retrofit+Rxjava+okhttp基本使用方法 2.统一处理请求数据格式 3.统一的ProgressDialog和回调Subscriber处理 4.取消http请求 5.预处理http请求 5.返回数据的统一判断 效果: 封装

一、OkHttp请求方法

OkHttp是一个高效的HTTP库: 支持 SPDY ,共享同一个 Socket 来处理同一个服务器的所有请求 如果 SPDY 不可用,则通过连接池来减少请求延时 无缝的支持GZIP来减少数据流量 缓存响应数据来减少重复的网络请求 OkHttp 处理了很多网络疑难杂症:会从很多常用的连接问题中自动恢复.如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP.OkHttp还处理了代理服务器问题和SSL握手失败问题. OkHttp是一个相对成熟的解决方案,据说

OkHttp介绍

Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient,HttpURLConnection相对来说比HttpClient难用,google自从2.3版本之后一直推荐使用HttpURLConnection,并且在6.0版本的sdk中直接删掉了HttpClient类. 但是, 上面两个类库和OkHttp比起来就弱爆了, 因为OkHttp不仅具有高效的请求效率,并且节省宽带, 还提供了很多开箱即用的网络疑难杂症解决方案.(据说Android4.4的源码中可

Android实际开发之网络请求组件的封装(OkHttp为核心)

趁周末时间撸了两天代码,将OkHttp网络请求框架进行了一次简单封装,对于实际开发非常有用.. 此次封装主要针对我们经常使用的网络请求的步骤进行封装,在已有框架OkHttp的基础上进行实际开发的封装 发送一个网络请求,有以下三个功能模块: 一:request处理 二:OkHttp核心处理 三:callback处理 我们进行网络请求组件的封装也是根据这三大模块进行封装的,下面规划一下这次封装的一个思维导图: 根据以上思维导图,我们第一步,先进行request的封装: 以下是封装的一个CommonR

OkHttp使用方法

1.在app/build.gradle中添加依赖 compile 'com.squareup.okhttp3:okhttp:4.0.1' 2.创建OkHttpClient实例 OkHttpClient client = new OkHttpClient(); 3.发送HTTP请求 Request request = new Request.Builder().build(); 上述只是创建了一个空的Request,可以在.build()方法前连缀很多其他方法. 4.发送请求,并获取服务器返回的数

okhttp实现断点上传

前言 之前项目需要上传大文件的功能,上传大文件经常遇到上传一半由于网络或者其他一些原因上传失败.然后又得重新上传(很麻烦),所以就想能不能做个断点上传的功能.于是网上搜索,发现市面上很少有断点上传的案例,有找到一个案例也是采用SOCKET作为上传方式(大文件上传,不适合使用POST,GET形式).由于大文件夹不适合http上传的方式,所以就想能不能把大文件切割成n块小文件,然后上传这些小文件,所有小文件全部上传成功后再在服务器上进行拼接.这样不就可以实现断点上传,又解决了http不适合上传大文件

OKhttp的封装(下)

OKhttpManager2.Class  请求工具类 1 package com.example.administrator.okhttp3; 2 3 import android.os.Handler; 4 import android.os.Looper; 5 6 import java.io.IOException; 7 import java.util.HashMap; 8 import java.util.Map; 9 10 import okhttp3.Call; 11 impor

网络请求三方库——OkHttp

我们知道在Android开发中是可以直接使用现成的API进行网络请求的,就是使用 HttpClient 和 HttpURLConnention ,而Android 4.4 之后 HttpClient 已经被废弃,由于此前一直很流行的三方库 android-async-http 是基于 HttpClient 的,所以作者已经放弃了维护 android-async-http 库,我们在项目中也尽量不要使用这个库. OkHttp是Squaur公司开源的一个高性能Http请求库,它的职责同 HttpUR

Android 使用OkHttp扩展Volley

我们先来回忆一下Volley的用法,使用Volley前,我们一般会先构造出一个RequestQueue,然后不断往该对象中添加请求Request,之后Volley便会进行调度,至于走缓存还是走网络这就看就没有请求过了.而构造RequestQueue的方法如下. Volley.newRequestQueue(mContext); 而该方法,内部实际上是调用了两个参数的重载方法 public static RequestQueue newRequestQueue(Context context) {

Android4种网络连接方式HttpClient、HttpURLConnection、OKHttp和Volley优缺点和性能对比

比较的指标: 1.cpu 2.流量 3.电量 4.内存占用 5.联网时间 功能点: 1.重试机制 2.提供的扩展功能 3.易用性 4.是否https 5.是否支持reflect api,OkHttp有配套方法 6.缓存.重试 7.cookie支持session  id会话支持 8.弱网性能和稳定性 9.超时时间,几种超时时间   连接超时,响应超时 10.适配各种机型.4.4和之前版本  2.3  4.1 5.0 4种网络连接方式提供的功能对比表格: 缓存 重试 Https/Http 稳定性 C