概述

对okhttp的get,put,delete,post请求简单封装,减少了不必要的冗余代码

详细

在自己项目的开发过程中需要用到网络请求,且用的okhttp网络框架,虽然用起来很方便,但是倒出充斥着重复代码,所以在研究了okhttp源码的基础上对Okhttp的使用进行了封装,结构清晰,可以满足基本的上传、下载、put,delete,get,post请求。如果想了解okhttp的工作原理,也可以参考本文后面留的博客地址

一、准备工作

在gradle文件中配置:

compile "com.squareup.okhttp3:okhttp:3.8.0"

二、程序实现

1、封装库的代码结构如下:

interf包:提供了IHttpConnect接口作为一个http链接,IResponse接口作为网络返回的响应接口;IRequestCallback接口作为每一个request请求的回调。

public interface IHttpConnect {
/**
* 异步请求
*/
void asyncConnect(@NonNull HttpRequest request); /**
* 同步链接请求,不能在主线程中调用,只能在异步线程中,并且注意同步引起的性能问题
*/
@WorkerThread
IResponse syncConnect(@NonNull HttpRequest request); void abort(HttpRequest request); void abortAll();
}

impl包:提供了一些IRequestCallback的简单实现,比如DownLoadCallback实现了文件下载功能。

okhttp包:其中OkhttoConnect是IHttpConnect接口的实现类,OkhttpHelper具体实现了Okhttp发起网络请求的功能。

request包:提供了OkhttpRequest类,作为请求参数的包装类。UploadFileReqeust作为文件上传用

response包:提供了OkResponse对象,作为Okhttp请求返回的封装

ConnectHelper:对我提供的IHttpConnect的适配类,其具体工作交给IHttpConnect的具体实现类,为简单的适配器模式

2、实现思路

从设计思路上来看,一个Request就是一个IHttpConnect发起的一个同步或者异步请求的过程,对于同步请求来说就是一个IHttpConnect实现类发起的syncConnect(Httprequest)过程,异步请求就是IHttpConnect发起的asyncConne(HttpRequest)过程。

3、简单的get请求:

ConnectHelper connectHelper = new ConnectHelper();
HttpRequest.Builder builder = new HttpRequest.Builder();
builder.setUrl("http://www.baidu.com")
.addHeader("xxx", "yyyy")
.addParams("xxx", "yyyy")
.setParams(map)
.setHeaders(map)
.setCallback(new RequestCallbackImpl() {
@Override
public void requestFinish(HttpRequest request, IResponse response) { }
});
HttpRequest request = builder.build();
connectHelper.asyncConnect(request);

4、简单的post请求:

  HttpRequest.Builder builder = new HttpRequest.Builder();
builder.setUrl("http://www.baidu.com")
.setRequestType(RequestType.DELETE)
.addHeader("xxx", "yyyy")
.addParams("xxx", "yyyy")
.setCallback(new RequestCallbackImpl() {
@Override
public void requestFinish(HttpRequest request, IResponse response) { }
});
HttpRequest request = builder.build();
connectHelper.asyncConnect(request);

5、简单的put请求:

  HttpRequest.Builder builder = new HttpRequest.Builder();
builder.setUrl("http://www.baidu.com")
.setRequestType(RequestType.PUT)
.addHeader("xxx", "yyyy")
.addParams("xxx", "yyyy")
.setCallback(new RequestCallbackImpl() {
@Override
public void requestFinish(HttpRequest request, IResponse response) { }
});
HttpRequest request = builder.build();
connectHelper.asyncConnect(request);

如果想使用文件下载功能,把callback传DownLoadCallback即可

三、运行效果

比如get请求获取字符串的requestCallBack如下:

setUrl("http://www.baidu.com")
.addHeader("xxx", "yyyy")
.addParams("xxx", "yyyy")
.setCallback(new RequestCallbackImpl() {
@Override
public void requestFinish(HttpRequest request, IResponse response) {
System.out.print("respose ==" + response.getString()); }
});

运行打印效果如下:

四、其他补充

1、除了addHeaders和addParams之外,如果需要批量添加一些header或者param也可以调用Builder的setHeaders(map)或者setParams(map)方法,将headers或者params放入map里面一次构建完成

2、如果需了解okhttp的工作原理的话,可以参考Ohttp源码分析系列博客

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

Okhttp实用封装的更多相关文章

  1. 最新 AFNetworking 3.0 简单实用封装

    AFNetworking 3.0 的到来使我们开发者又方便了许多,话不多说,直接上代码. 1.首先 引入框架AFNetworking框架 GitHub下载地址:https://github.com/A ...

  2. OkHttp 优雅封装 OkHttps 之 回调线程魔变

    第一篇:OkHttp 优雅封装 HttpUtils 之 气海雪山初探 第二篇:OkHttp 优雅封装 HttpUtils 之 上传下载解密 简介 HttpUtils 从 v2.3.0 之后便重命名了, ...

  3. OkHttp 优雅封装 HttpUtils 之 气海雪山初探

    曾经在代码里放荡不羁,如今在博文中日夜兼行,只为今天与你分享成果.如果觉得本文有用,记得关注我,我将带给你更多. 介绍 HttpUtils 是近期开源的对 OkHttp 轻量封装的框架,它独创的异步预 ...

  4. OkHttp 优雅封装 HttpUtils 之 上传下载解密

    曾经在代码里放荡不羁,如今在博文中日夜兼行,只为今天与你分享成果.如果觉得本文有用,记得关注我,我将带给你更多. 还没看过第一篇文章的欢迎移步:OkHttp 优雅封装 HttpUtils 之气海雪山初 ...

  5. android 开发 - 使用okhttp框架封装的开发框架

    概述 在android开发中经常要访问网络,目前最流行的网络访问框架就是Okhttp了,然而我们在具体使用时,往往仍然需要二次封装.我使用Builder设计模式进行了封装形成oknet开源库. 介绍 ...

  6. 基于OkHttp的封装库TigerOkHttp的使用

    在前面熟悉了OkHttp的用法之后,为了简化用法同时适用于我的项目,我针对OkHttp进行了更进一步的封装(源码及其Demo地址在https://github.com/huyongli/TigerOk ...

  7. 安卓OKhttp请求封装

    目前安卓开发中使用的网络工具为OKhttp,但是okhttp的使用还不是很方便,在okhttp的基础上再对请求进行封装会极大的方便网络调用. 下面直接上代码. 请求封装 public class Ht ...

  8. OKhttp的封装(下)

    OKhttpManager2.Class  请求工具类 package com.example.administrator.okhttp3; import android.os.Handler; im ...

  9. OKhttp的封装(上)

    自从介绍了OKhttp3的一些基本使用之后,又偷了下懒,所以它的续篇被搁置了一段时间,现在补充. OKhttpManager.Class  请求工具类 package com.example.admi ...

随机推荐

  1. Codeforces Round #304 (Div. 2) C. Soldier and Cards 水题

    C. Soldier and Cards Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/546 ...

  2. PAT甲级1016. Phone Bills

    PAT甲级1016. Phone Bills 题意: 长途电话公司按以下规定向客户收取费用: 长途电话费用每分钟一定数量,具体取决于通话时间.当客户开始连接长途电话时,将记录时间,并且客户挂断电话时也 ...

  3. JavaScript的最大函数參数长度和最大栈深度检測

    一般代码也许不会涉及最大參数长度和最大栈深度,但某些特殊场合,检測这两个參数还是有必要的.比如:用递归计算斐波那契数列的第n个值,不了解最大栈深度,难免显得肤浅.又比如:将一串charCode转成St ...

  4. JSON数据转换到POCO的代码

    转载:http://www.cnblogs.com/wintersun/archive/2012/09/14/2684708.html 在Visual Studio 2012中轻松把JSON数据转换到 ...

  5. 关于Go语言,自己定义结构体标签的一个妙用.

    在Go中首字母大写和小写,决定着这此变量能否被外部调用, 比如:在使用标准库的json编码自定一的结构的时候: <pre style="margin-top: 0px; margin- ...

  6. chromium的安装程序

    转自:http://www.xue163.com/182/6/1822338.html#pinglun 这篇文章主要简单讲解chromium的安装程序mini_installer 在编译mini_in ...

  7. 使用OllyDbg破解软件

    好,废话不多说,教程开始.  我们首先查壳,是Aspark的壳,对于这个壳,大家应该很熟了.<ignore_js_op>   我已经脱好了壳,再查一下壳,是Dephi的<ignore ...

  8. VB开发ActiveX控件的一些记录

    注意,下面很多语句的用法,不能放在Private Sub UserControl_Initialize()里使用,要放在Private Sub UserControl_InitProperties() ...

  9. iOS网络编程解析协议二:XML数据传输解析

    XML两种解析方式,一种是SAX,NSXMLParser是SAX方法解析,另一种是DOM(Document Object Model); 区别: SAX: 只能读,不能修改,只能顺序访问,适合解析大型 ...

  10. Servlet介绍以及简单实例

    一.背景介绍: HTTP:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.设计HTTP最初的目的是为了提供一种发布和接收 HTM ...