EasyHttp
是一个基于OkHttp封装的Kotlin DSL网络请求框架
- 支持HTTP GET/POST/PUT/DELETE
- 文件下载(带进度)
- 文件上传 (multipart/form-data)(带进度)
- RxJava2.0请求响应支持
- 支持Gson自动序列化与Parser自定义拓展
- 支持OkHttpClient的自定义配置
- 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}'
}
配置全局OkHttpClient
/**
* 构建OkHttpClient
* 使用这种方式构建的话,会直接配置成默认使用的OkHttpClient
*/
EClient {
//配置默认的baseUrl
baseUrl = "http://mall.rayhahah.com/"
//配置默认的请求类型
type = TYPE.METHOD_POST
timeUnit = TimeUnit.SECONDS
connectTimeout = 10
readTimeout = 10
writeTimeout = 10
interceptors()
networkInterceptors()
retryOnConnectionFailure = true
cache = null
//配置默认的解析器
parser = null
//配置全局通用的请求头
header = {
"custom_head"("rayhahah")
}
}
或者直接传入自定义的OkHttpClient
EClient(client: OkHttpClient)
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)
只要把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())
}
默认提供JsonParser
内部使用Gson
来自动序列化JSON字符串。
我们也可以自定义Parser
来实现自己的数据前处理
这个过程是发生在子线程中的,我们可以去解析一些特地复杂的请求返回数据
实现Parser
接口,根据自己的需求处理数据返回即可,
ps:这里的返回值要与请求时的泛型类型保持一致
class CustomParser : Parser {
/**
* 数据解析
*/
override fun parse(response: Response): Any? {
return response.body()?.string()
}
/**
* 数据解析的规则
*/
override fun isCanParse(response: Response): Boolean {
return true
}
/**
* 数据解析
*/
override fun unParse(response: Response): Any? {
return response.body()?.string()
}
}
如果你在使用EasyHttp中遇到任何问题可以提Issues出来。另外欢迎大家为EasyHttp贡献智慧,欢迎大家Fork and Pull requests。 喜欢就给个star呗,o( ̄▽ ̄)ブ