基于OkHttp的Kotlin DSL网络请求框架
Branch: master
Clone or download
Latest commit 759a123 Apr 7, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea 项目框架基本完成 Mar 7, 2018
app v1.1.1发布 Apr 7, 2018
gradle/wrapper init project Feb 10, 2018
library v1.1.2 Apr 7, 2018
.gitignore init project Feb 10, 2018
LICENSE Create LICENSE Mar 9, 2018
README.md v1.1.1发布 Apr 7, 2018
build.gradle JitPack上传 Mar 9, 2018
gradle.properties init project Feb 10, 2018
gradlew init project Feb 10, 2018
gradlew.bat init project Feb 10, 2018
settings.gradle 项目框架基本完成 Mar 7, 2018

README.md

EasyHttp

PRs Welcome Kotlin GitHub release API License Apache2.0

EasyHttp是一个基于OkHttp封装的Kotlin DSL网络请求框架

功能

  • 支持HTTP GET/POST/PUT/DELETE
  • 文件下载(带进度)
  • 文件上传 (multipart/form-data)(带进度)
  • RxJava2.0请求响应支持
  • 支持Gson自动序列化与Parser自定义拓展
  • 支持OkHttpClient的自定义配置
  • 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

    /**
              * 构建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)

GET/POST/PUT/DELETE请求

  • client : 本次请求使用的OkHttpClient,不配置的话默认使用上面EClient配置的OkHttpClient对象
  • type : 区别请求类型,TYPE.METHOD_GETTYPE.METHOD_POSTTYPE.METHOD_PUTTYPE.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())
                    }

自定义Parser

默认提供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( ̄▽ ̄)ブ

感谢