# xhttp **Repository Path**: pichs/xhttp ## Basic Information - **Project Name**: xhttp - **Description**: 网络请求库 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-03-18 - **Last Updated**: 2023-05-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: 网络请求库, OkGo, retrofit, 二次封装贼好用 ## README # XHttp ### 引入控件 最新版本: [![](https://jitpack.io/v/com.gitee.pichs/xhttp.svg)](https://jitpack.io/#com.gitee.pichs/xhttp) // 引入方案 一 (推荐) // 1、完全体 (直接全引入) implementation 'com.gitee.pichs:xhttp:4.0.0' 或者 // 引入方案 二, 用了方案一就不要再用二了。 // 2.1 只要http (必选) implementation 'com.gitee.pichs.xhttp:http:4.0.0' // 2.2 添加downloader下载管理器(可选) implementation 'com.gitee.pichs.xhttp:downloader:4.0.0' ## 理由 - 为啥基于okgo 1. 用过市面上所有的网络开源框架,最终选择了okgo, 2. 主要是稳定性和易用性:架构的非常妙,值得学习! 3. 支持的请求非常全,ssl自定义等还支持下载管理器(一条龙),可见作者花了很大的心思,值得借鉴。 ### 声明 - 想用的话自己去使用okgo吧,请尊重(okgo)作者,虽然多年未更新该库,但是框架确是很优秀。 - 吾不想如果优秀的框架沉沦,所以在源码中修改(包括更改api包名路径,类名等。) - 升级okhttp网络库版本至最新。 - okgo本身稳定性兼容性极好,非常适合在大型项目中使用。 - 但是本身api的调用当时相对于retrofit2又显得过于臃肿,需要写过多代码, - 很难配合协程做到很优雅的实现。 - 所以突发奇想,结合retrofit2的设计思想在 okgo的基础上进行二次开发 - retrofit2随使用做到极简,但稳定性,错误回调等(虽说可以统一json,但是不是所有api都是同一套json格式,有些项目后端api很杂,很不统一)处理却没那么友好。 1. 保证稳定性,兼容性 2. 使用方式变得想retrofit2那么简单 3. 支持协程,更轻松的调用。像retrofit2那样 4. xxx其他待思考。 - 总之以稳定,兼容为主,简单易用,接口易维护为辅,形成一套舒服的框架。 - 我观察了其他框架rxhttp,easyhttp等,总有那么一点不尽人意的地方。 - 索性自己搞一套得了。企业开发,还是得注重一下基础库的选择,搞不好就是屎山代码。 ### 介绍 - 此框架支持 get,post,delete,patch,put,options,trace,head八中请求方式, - 额外封装了upload,download 两个方式,更方便精准使用,带进度回调 - 链式调用爽翻天 - params("key","value") 添加请求体 - header("key","value") 添加请求头 - asJson() 是否作为json格式上传,默认xxx-form-urlencoder格式 - 开起asJson, 请求参数 为 application/json; utf-8 格式 ## 用法,普通请求 // 在application的onCreate中初始化 // 第二个参数是否开启日志,默认false XHttp.init(this, true); // 设置全局公共参数,请求头,和请求参数 // 利用接口实现,每次都会执行commonHeaders(),commonParams()这俩方法,不用担心token更新不到的情况 // 可以放在application中初始化,也可以放到喜欢的地方,该方法也可以调用多次,以最后一次为准。 XHttp.addHttpCommons(new IHttpCommons() { @Override public Map commonHeaders() { Log.d("啊啊啊啊啊", "commonHeaders----6666"); return null; } @Override public Map commonParams() { Log.d("啊啊啊啊啊", "commonParams----7777"); return null; } }); // post请求 XHttp .post("https://www.qq.com") .header("aaa","aaa") .param("key", "我是大神仙") .cacheTime(100000) .cacheKey("阿萨德解放啦圣诞节福利") .cacheMode(HttpCacheMode.REQUEST_FAILED_READ_CACHE) .asJson() .execute(new StringCallBack() { @Override public void onSuccess(int status, String result) { ToastUtils.toast(mActivity, "status:" + status + ", result:" + result); } @Override public void onFailure(HttpError error) { ToastUtils.toast(mActivity, "error:" + error.toString()); } }); XHttp .upload("") .upFile(new File("")) .execute(new FileCallBack() { @Override public void onComplete(@Nullable File file) { } @Override public void onProgress(HttpProgress progress) { } @Override public void onFailure(HttpError error) { } }); XHttp .download("") .fileFolder("") .fileName("") .execute(new FileCallBack() { @Override public void onComplete(@Nullable File file) { } @Override public void onProgress(HttpProgress progress) { } @Override public void onFailure(HttpError error) { } }); ## 断点续传下载,上传 ```kotlin // 上传文件伪代码 XUpload.upload("tag", "", File("")) .register(object : UploadListener("a") { override fun onProgress(progress: Progress?) { } override fun onFinish(t: String?, progress: Progress?) { } override fun onStart(progress: Progress?) { } override fun onError(progress: Progress?) { } override fun onRemove(progress: Progress?) { } }) .save() .start() // 下载文件代码 XDownload .download(url, url) .fileName("哔哩哔哩.apk") .register(object : DownloadListener(url) { override fun onStart(progress: Progress?) { } override fun onProgress(progress: Progress?) { progress?.let { binding.tvResult.text = "下载进度:${((progress.currentSize.toFloat() * 100) / progress.totalSize)}%" } } override fun onError(progress: Progress?) { } override fun onFinish(t: File?, progress: Progress?) { binding.tvResult.text = "下载完成:文件路径:${t?.absolutePath}" } override fun onRemove(progress: Progress?) { } }) .save() .start() ``` ## 升级日志 1. v4.0.0 上传下载api修改,网络请求api修改(破坏性升级) (推荐) 2. v3.0.1 代码合入,自己维护。 3. v2.0.0 优化兼容,升级okhttp 4. v1.0 基于OkHttp3进行的封装