基于OkHttp的輕量級Kotlin DSL網(wǎng)絡(luò)請求框架

EasyHttp

EasyHttp是一個基于OkHttp封裝的Kotlin DSL網(wǎng)絡(luò)請求框架
Github地址

功能

  • [x] 支持HTTP GET/POST/PUT/DELETE
  • [x] 文件下載(帶進度)
  • [x] 文件上傳 (multipart/form-data)(帶進度)
  • [x] RxJava2.0請求響應(yīng)支持
  • [x] 支持Gson自動序列化與Parser自定義拓展
  • [x] 支持OkHttpClient的自定義配置
  • [x] DSL配置請求

目錄

安裝說明

Gradle:

  1. 先在 build.gradle(Project:XXXX) 的 repositories 添加:
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
  1. 然后在 build.gradle(Module:app) 的 dependencies 添加:
    dependencies {
          compile 'com.github.Rayhahah:EasyHttp:{release_version}'
    }

Client配置

配置全局OkHttpClient

    /**
              * 構(gòu)建OkHttpClient
              * 使用這種方式構(gòu)建的話,會直接配置成默認使用的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)


## GET/POST/PUT/DELETE請求
- `client` : 本次請求使用的`OkHttpClient`,不配置的話默認使用上面`EClient`配置的`OkHttpClient`對象
- `type` : 區(qū)別請求類型栏妖,`TYPE.METHOD_GET` 、`TYPE.METHOD_POST`笆包、`TYPE.METHOD_PUT` 、`TYPE.METHOD_DELETE` 酸舍、
- `data` :  請求攜帶的參數(shù)亲雪,`"key"("value")`
- `header` : 請求頭參數(shù) ,`"key"("value")`
- `go(success,fail,progress)` : 發(fā)送請求锅睛,回調(diào)都是在主線程中
    - `success = {data:Response->}` : 請求成功回調(diào)
    - `fail = {call:Call,e:Exception -> }` : 請求失敗回調(diào)
    - `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"("上傳文件類型"现拒,F(xiàn)ile())`
    - `"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())
                }

## 自定義Parser
默認提供`JsonParser`內(nèi)部使用`Gson`來自動序列化JSON字符串辣垒。
我們也可以自定義`Parser`來實現(xiàn)自己的數(shù)據(jù)前處理

這個過程是發(fā)生在子線程中的,我們可以去解析一些特地復(fù)雜的請求返回數(shù)據(jù)

實現(xiàn)`Parser`接口印蔬,根據(jù)自己的需求處理數(shù)據(jù)返回即可勋桶,

ps:這里的返回值要與請求時的泛型類型保持一致

class CustomParser : Parser {
/**
* 數(shù)據(jù)解析
*/
override fun parse(response: Response): Any? {
return response.body()?.string()
}

/**
 * 數(shù)據(jù)解析的規(guī)則
 */
override fun isCanParse(response: Response): Boolean {
    return true
}

/**
 * 數(shù)據(jù)解析
 */
override fun unParse(response: Response): Any? {
    return response.body()?.string()
}

}



## 貢獻
如果你在使用EasyHttp中遇到任何問題可以提[Issues](https://github.com/Rayhahah/EasyHttp/issues)出來。另外歡迎大家為EasyHttp貢獻智慧扛点,歡迎大家[Fork and Pull requests](https://github.com/Rayhahah/EasyHttp)哥遮。
喜歡就給個star唄,o(* ̄▽ ̄*)ブ

## 感謝
- [OkHttp](https://github.com/square/okhttp/)
- [RxJava](https://github.com/ReactiveX/RxJava/)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末陵究,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子奥帘,更是在濱河造成了極大的恐慌铜邮,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寨蹋,死亡現(xiàn)場離奇詭異松蒜,居然都是意外死亡,警方通過查閱死者的電腦和手機已旧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門秸苗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人运褪,你說我怎么就攤上這事惊楼。” “怎么了秸讹?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵檀咙,是天一觀的道長。 經(jīng)常有香客問我璃诀,道長弧可,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任劣欢,我火速辦了婚禮棕诵,結(jié)果婚禮上裁良,老公的妹妹穿的比我還像新娘。我一直安慰自己校套,他們只是感情好价脾,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著搔确,像睡著了一般彼棍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天骤视,我揣著相機與錄音闰挡,去河邊找鬼。 笑死华匾,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的机隙。 我是一名探鬼主播蜘拉,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼有鹿!你這毒婦竟也來了旭旭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤葱跋,失蹤者是張志新(化名)和其女友劉穎持寄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體娱俺,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡稍味,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了荠卷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片模庐。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖油宜,靈堂內(nèi)的尸體忽然破棺而出掂碱,到底是詐尸還是另有隱情,我是刑警寧澤验庙,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布顶吮,位于F島的核電站,受9級特大地震影響粪薛,放射性物質(zhì)發(fā)生泄漏悴了。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望湃交。 院中可真熱鬧熟空,春花似錦、人聲如沸搞莺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽才沧。三九已至迈喉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間温圆,已是汗流浹背挨摸。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留岁歉,地道東北人得运。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像锅移,于是被迫代替她去往敵國和親熔掺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容