简介

HttpUtils 从 v2.3.0 之后便重命名了,因为它已不单单是几个工具类,而是一套具有丰富功能的轻量网络开发包。更像是 OkHttp 的加强版,所以它的名字是 OkHttps。

安装教程

Maven

com.ejlchina

okhttps

1.0.4

复制代码

Gradle

implementation 'com.ejlchina:okhttps:1.0.4'

复制代码

安卓中使用需要把 JDK 版本调成 1.8,在 app 模块的 build.gradle 中加入以下配置即可:

android {

// 省略其它配置..

compileOptions {

sourceCompatibility = 1.8

targetCompatibility = 1.8

}

}

复制代码

在正式开始之前,我们依然假设,下文中出现http均是在构建时设置了BaseUrl的HTTP实例(详细请看前文):

HTTP http = HTTP.builder()

.baseUrl("http://api.demo.com")

.build();

复制代码

OK,一切就绪,我们接着上篇文章继续讲。

回调线程自由切换(for Android)

在 Android 开发中,经常会把某些代码放到特点的线程去执行,比如网络请求响应后的页面更新在主线程(UI线程)执行,而保存文件则在IO线程操作。OkHttps 为这类问题提供了良好的方案。

在 默认 情况下,所有回调 函数都会 在 IO 线程 执行。为什么会设计如此呢?这是因为 OkHttps 只是纯粹的 Java 领域 Http工具包,本身对 Android 不会有任何依赖,因此也不知 Android 的 UI 线程为何物。这么设计也让它在 Android 之外有更多的可能性。

但是在 Android 里使用 OkHttps 的话,UI线程的问题能否优雅的解决呢?当然可以!简单粗暴的方法就是配置一个 回调执行器:

HTTP http = HTTP.builder()

.callbackExecutor((Runnable run) -> {

// 实际编码中可以吧 Handler 提出来,不需要每次执行回调都重新创建

new Handler(Looper.getMainLooper()).post(run); // 在主线程执行

})

.build();

复制代码

上述代码便实现了让 所有 的 回调函数 都在 主线程(UI线程) 执行的目的,如:

http.async("/users")

.addBodyParam("name", "Jack")

.setOnProcess((Process process) -> {

// 在主线程执行

})

.setOnResponse((HttpResult result) -> {

// 在主线程执行

})

.setOnException((Exception e) -> {

// 在主线程执行

})

.setOnComplete((State state) -> {

// 在主线程执行

})

.post();

复制代码

但是,如果同时还想让某些回调放在IO线程,实现 自由切换,怎么办呢?OkHttps 给出了非常灵活的方法,如下:

http.async("/users")

.addBodyParam("name", "Jack")

.setOnProcess((Process process) -> {

// 在主线程执行

})

.nextOnIO() // 指定下一个回调在 IO 线程执行

.setOnResponse((HttpResult result) -> {

// 在 IO 线程执行

})

.setOnException((Exception e) -> {

// 在主线程执行(没有指明 nextOnIO 则在回调执行器里执行)

})

.nextOnIO() // 指定下一个回调在 IO 线程执行

.setOnComplete((State state) -> {

// 在 IO 线程执行

})

.post();

复制代码

无论是哪一个回调,都可以使用nextOnIO()方法自由切换。同样,对于文件下载也是一样:

http.sync("/download/test.zip")

.get()

.getBody()

.setOnProcess((Process process) -> {

// 在主线程执行

})

.toFolder("D:/download/")

.nextOnIO() // 指定下一个回调在 IO 线程执行

.setOnSuccess((File file) -> {

// 在 IO 线程执行

})

.setOnFailure((Failure failure) -> {

// 在主线程执行

})

.start();

复制代码

怎么样,是不是很简单呢?

如果觉得可以,就到这里点个小星星吧:

android 封装回调,OkHttp 优雅封装 OkHttps 之 回调线程魔变相关推荐

  1. Android中使用封装的OKHttp上传图片,从相机和相册中获取图片并剪切

    Android中使用OKHttp上传图片,从相机和相册中获取图片并剪切 效果: 注意: 1:网络权限 <uses-permission android:name="android.pe ...

  2. OkHttp协议介绍以及文件下载和上传+OkHttp协议封装+OkHttp拦截器____SpringBoot——集成Okhttp3

    OkHttp协议 okhttp是一个第三方类库,用于android中请求网络 这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCan ...

  3. Android Tencent X5 WebView 集成封装

    Android Tencent X5 WebView 集成封装 Cookie管理.进度监听.适配8.1系统等策略 这篇文章的目标就是怎么样快速封装X5WebView,如何有效的同步以及管理Cookie ...

  4. Android架构篇-3 网络接口封装

    Android架构篇-3 网络接口封装 实现功能: 1.暴露参数请求地址url.请求方法method.请求参数params.请求头header.请求响应response.https请求证书 2.支持g ...

  5. RecyclerView Adapter 优雅封装搞定所有列表

    转载自: 依然范特稀西 RecycleView加载列表,封装Adapter,快速高效的添加一个列表(包括单 Item 列表和多item列表). 理念 1, 构造一个通用的Adapter模版,避免每添加 ...

  6. OkHttp完美封装,一行搞完外部请求

    OkHttp完美封装,一行搞完外部请求 OKHttpUtil 在Java的世界中,Http客户端之前一直是Apache家的HttpClient占据主导,但是由于此包较为庞大,API又比较难用,因此并不 ...

  7. 社会化登录分享-Android SDK的二次封装和使用

    本系列文章将第三方的登录分享功能进行二次封装,统一接口调用,简化了接不同平台登录分享的步骤. 0 系列文章 系列一 Android SDK的二次封装和使用 系列二 源码解析 系列三 微信SDK接入 系 ...

  8. Android开发之SharedPreferences的封装

    对于大部分初学者来说,如果想利用SharedPreferences进行数据存储的话大部分人(包括本人)应该会这样: 存储: SharedPreferences sharedPreferences = ...

  9. Android RecyclerView(五)封装Holder与Adapter(Android 5.0 新特性)

    Android RecyclerView(五)封装Holder与Adapter(Android 5.0 新特性) 1 效果 2 BaseHolder的封装 public class BaseViewH ...

  10. Android 图片处理工具类封装2

    http://www.2cto.com/kf/201312/263638.html Android 图片处理工具类封装 2013-12-10     0个评论   来源:Wiker Yong 的专栏  ...

最新文章

  1. sql优化的方法及思路_合理的sql优化思路--如何缩短SQL调优时间?
  2. java 7 jboss_JBoss7 入门指南
  3. Git 的安装和创建版本库 。
  4. React 的 Hello World
  5. 【英语学习】【English L06】U06 Banking L2 A savings account sounds better for me
  6. uniapp app蓝牙打印_编程器加装蓝牙串口模块与手机APP操作演示
  7. linux 查看系统内存及系统负载
  8. 在windows 2003系统上安装诺基亚pc套件的方法
  9. Scratch的广播与消息
  10. 全网显示 IP 归属地,这背后的技术你知道吗?
  11. 贝叶斯判别分析,Python代码分类讲解
  12. java 熄灯问题_C++基础算法学习——熄灯问题
  13. 使用 字蛛 对ttf字体文件进行压缩
  14. 如何学会做一名优秀的下属
  15. 【java校招你不知道的那些事儿】java校招有没有考点大纲?不能拿面试补缺
  16. Android手机直播(一)总览
  17. 苹果手机隐私分析数据是什么_苹果和谷歌可能是我们在隐私操作系统上的最佳选择...
  18. warning: unused variable ‘D‘ [-Wunused-variable]|
  19. SpringCloud学习笔记(十) Bus 消息总线
  20. 数理逻辑蕴含_数理逻辑为什么犯傻?

热门文章

  1. spark rdd详解二(transformation与action操作)
  2. 4台服务器集群搭建_Redis Cluster高可用集群搭建
  3. 可变车道怎么走不违章_还记得这种车道怎么走吗?
  4. 快速掌握用python写并行程序_自己python程序的并行修改
  5. html5 显示圆形图片,《小白HTML5成长之路40》怎样显示圆角图片
  6. 假设检验_关于假设检验与P值的几点看法
  7. RocketMQ 源码之 异步和同步请求 以及异步的回调 是怎么做到的
  8. 使用fileupload实现文件上传
  9. 《程序是怎样跑起来的》第十一章读后感
  10. pycharm中同时注释多行代码