EasyHttp
EasyHttp
是一个基于OkHttp封装的Kotlin DSL网络请求框架
动机
最近学了Kotlin (现在学Kotlin还有人赞吗,手动滑稽),为了不立马忘记,就基于OkHttp撸了一个框架。
本质为了有那么一丢丢逼格地去发起网络请求o( ̄▽ ̄)ブ 熟悉一下Kotlin,还顺路支持了一下RxJava
后续会慢慢维护和改进,如封装出合理的Parser接口,供大家自定义数据展示前的预处理。
最后希望能得到大佬们的star和PR,(●'◡'●)
功能
- [x] 支持HTTP GET/POST/PUT/DELETE
- [x] 文件下载(带进度)
- [x] 文件上传 (multipart/form-data)(带进度)
- [x] RxJava2.0请求响应支持
- [x] 支持OkHttpClient的自定义配置
- [x] DSL配置请求
目录
安装说明
Gradle:
- 先在 build.gradle(Project:XXXX) 的 repositories 添加:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- 然后在 build.gradle(Module:app) 的 dependencies 添加:
dependencies {
compile 'com.github.Rayhahah:EasyHttp:{release_version}'
}
Client配置
配置全局OkHttpClient
/**
* 构建OkHttpClient
* 使用这种方式构建的话,会直接配置成默认使用的OkHttpClient
*/
EClient {
timeUnit = TimeUnit.SECONDS
connectTimeout = 10
readTimeout = 10
writeTimeout = 10
interceptors()
networkInterceptors()
retryOnConnectionFailure = true
cache = Cache(getCachePathStr(), maxCacheSize.toLong())
}
或者直接传入自定义的OkHttpClient
EClient(client: OkHttpClient)
GET/POST/PUT/DELETE请求
client
: 本次请求使用的OkHttpClient
,不配置的话默认使用上面EClient
配置的OkHttpClient
对象type
: 区别请求类型,TYPE.METHOD_GET
、TYPE.METHOD_POST
、TYPE.METHOD_PUT
、TYPE.METHOD_DELETE
、data
: 请求携带的参数,"key"("value")
header
: 请求头参数 ,"key"("value")
go(success,fail,progress)
: 发送请求,回调都是在主线程中success = {data:Response->}
: 请求成功回调fail = {call:Call,e:Exception -> }
: 请求失败回调progess = {value:Float,total:Long -> }
: 请求过程回传,上传文件可以查看
一次正常且配置详细的请求如下:
EHttp {
client = okHttpClient
baseUrl = "http://mall.rayhahah.com/"
src = "user/login.do"
type = TYPE.METHOD_GET
data = {
"username"(username)
"password"(password)
}
header = {
"cache-Control"("no-cache")
}
}.go(success,fail,progress)
接下来,简便一点:
EHttp{
baseUrl = "http://mall.rayhahah.com/"
src = "user/login.do"
type = TYPE.METHOD_GET
data = {
"username"(username)
"password"(password)
}
}.go{data:Response -> }
或者简单的请求可以这样
EGet(url:String,params:HashMap<String,String>())
.go{data:Response->}
EPost(url:String,params:HashMap<String,String>())
.go{data:Response->}
文件上传
file
: 上传的文件"key"("上传文件类型",File())
"key"(HttpFile("上传文件类型",ArrayList<File>())
EHttp {
baseUrl = "http://mall.rayhahah.com/"
src = "easysport/user/update_cover.do"
type = TYPE.METHOD_POST
data = {
"username"(username)
"password"(password)
file = {
//上传单个文件
"upload_file"(Files.FILE_TYPE_MULTIPART, cover)
//上传单个字段多个文件
val fileList = ArrayList<File>()
fileList.add(File("1.txt"))
fileList.add(File("2.txt"))
fileList.add(File("3.txt"))
"upload"(HttpFile(Files.FILE_TYPE_MULTIPART, fileList))
}
}
header = {
"cache-Control"("no-cache")
}
}.go(success, fail, progress)
文件下载
EHttp {
baseUrl = "http://thing.rayhahah.com/version/EasySport_1.1.4.apk"
download = {
fileDir = FileUtils.getRootFilePath() + "EasyHttp/images"
fileName = "test.apk"
}
}.download(success={ data: File ->
data.log()
}, fail={ call: Call, exception: Exception ->
}, progress={ value: Float, total: Long ->
value.log()
total.log()
})
//简单一点~~~~
EDownload(url,fileDir:String,fileName:String,success,fail,progress)
RxJava兼容
只要把go
或者rx
就可以返回Observable<Response>
o( ̄▽ ̄)ブ
EHttp {
baseUrl = "http://mall.rayhahah.com/"
src = "user/login.do"
type = method
data = {
"username"(username)
"password"(password)
}
header = {
"cache-Control"("no-cache")
}
}.rx(progress = { value, total -> })
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { t: Response ->
t.log()
mTvTest.setText(t.body()?.string())
}
贡献
如果你在使用EasyHttp中遇到任何问题可以提Issues出来。另外欢迎大家为EasyHttp贡献智慧,欢迎大家Fork and Pull requests。 喜欢就给个star呗,o( ̄▽ ̄)ブ
感谢
TODO
- Parser的封装,更好对数据展示前预处理