EasyHttp
是一個基於OkHttp封裝的Kotlin DSL網絡請求框架android
Github地址git
Gradle:github
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
複製代碼
dependencies {
compile 'com.github.Rayhahah:EasyHttp:{release_version}'
}
複製代碼
配置全局OkHttpClient
api
/**
* 構建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
bash
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)
複製代碼
接下來,簡便一點:app
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( ̄▽ ̄)ブmaven
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
來實現本身的數據前處理ide
這個過程是發生在子線程中的,咱們能夠去解析一些特意複雜的請求返回數據
實現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( ̄▽ ̄)ブ