Lychee

Project Url: VipMinF/Lychee
Introduction: 基于 retrofit 实现的网络请求库,支持多任务上传下载,断点续传,可选 Rxjava,Rxjava2,retrofit 原生请求
More: Author   ReportBugs   
Tags:

介绍

Lychee 是一个基于 Retrofit2 实现的轻量级网络请求库,支持多任务上传,下载,断点续传,使用简单,方便。使用注解简化了 Retrofit2 原有的文件上传方式,支持添加通用请求参数参数签名(文件使用 md5)

相关文章

用法

初始化配置

    override fun onCreate() {
        super.onCreate()
        LycheeHttp.init(MyCoreConfig(this))
    }

下载的 API 定义

下载只需要使用 Download 注解 API 就可以啦

    @Download
    @GET("https://xxxx/xxxx.apk")
    fun download(): Call<DownloadBean>

上传的 API 定义

  1. 根据文件名称的后缀名获取,使用Upload 进行注解
     @Upload
     @Multipart
     @POST("http://xxx/xxx")
     fun upload(@Part("file") file: File): Call<ResultBean<UploadResult>>
    
  2. 对某个 file 进行注解,使用FileType("png") 或者FileType("image/png")
     @Multipart
     @POST("http:/xxx/xxx")
     fun upload(@Part("file") @FileType("png") file: File): Call<ResultBean<UploadResult>>
    
  3. 对整个方法的所有 file 参数进行注解,使用MultiFileType("png")或者MultiFileType("image/png")

     @Multipart
     @MultiFileType("png")
     @POST("http://xxx/xxx")
     fun upload(@PartMap map: MutableMap<String, Any>): Call<ResultBean<UploadResult>>
     fun upload(@PartMap map: MutableMap<String, Any>): Call<UploadResult>
    

    使用

    ```kotlin //普通请求 getService().hello().request {

       onSuccess = { Toast.makeText(App.app, it.data ?: "", Toast.LENGTH_SHORT).show() }
       onErrorMessage = {}
       onCompleted = {}
    

    }

    //单个文件下载 getService().download().request(File(App.app.externalCacheDir, "qq.apk")) {

       onSuccess = { Toast.makeText(App.app, "${it.downloadInfo?.fileName} 下载完成", Toast.LENGTH_SHORT).show() }
       onErrorMessage = {}
       onCompleted = {}
    

    }

    //多任务下载 addDownloadTaskButton.setOnClickListener {

       val downloadTask = DownloadTask()
       val file = File(App.app.externalCacheDir, "qq${adapter.data.size + 1}.apk"
       downloadTask.download("https://xxx/xxx.apk", file)
       adapter.addData(downloadTask)
    

    }

    //多任务上传 addUploadTaskButton.setOnClickListener {

       val uploadTask = UploadTask()
       uploadTask.upload(File(App.app.externalCacheDir, "qq${adapter.data.size + 1}.apk"))
       adapter.addData(uploadTask)
    

    }



以上是用法,接下来的是配置
***
## 配置
配置总归还是要有滴,因为总得有个地方配置 Host 的吧。为了方便我也准备了一些默认的配置
#### 总配置
`ICoreConfig`默认配置的为`DefaultCoreConfig` ,DefaultCoreConfig 是一个抽象类,只有继承它配置一下 Host 就可以用了哟
```kotlin
/**
 * 整个请求库的核心配置接口
 * 默认配置
 * @see com.vecharm.lychee.http.config.defaults.DefaultCoreConfig
 * */
interface ICoreConfig {
    /**
     * 初始化 Okhttp
     * */
    fun onInitClient(builder: OkHttpClient.Builder): OkHttpClient.Builder

    /**
     * 初始化 Retrofit
     * */
    fun onInitRetrofit(builder: Retrofit.Builder): Retrofit.Builder

    /**
     * 获取请求 请求配置 DefaultRequestConfig 为默认配置
     * @see com.vecharm.lychee.http.config.defaults.DefaultRequestConfig
     * */
    fun getRequestConfig(): IRequestConfig

    /**
     * 获取返回值处理者 DefaultResponseHandler 为默认配置
     * @see com.vecharm.lychee.http.config.defaults.DefaultResponseHandler
     * */
    fun <T> getResponseHandler(tClass: Class<T>): IResponseHandler<T>
}

API 兼容

如果你不喜欢用 RxJava,只用 kotlin 可以这样定义

    @POST("hello")
    fun hello(): Call<ResultBean<String>>

如果你喜欢用 RxJava 或者 RxJava2

    @POST("hello")
    fun hello(): Observable<ResultBean<String>>

简约,才是代码之美,这样写代码才像极了爱情。喜欢的话给个 star 鼓励一下我哟,感谢各位大大。

Apps
About Me
Google+: Trinea trinea
GitHub: Trinea