Lychee
Introduction: 基于 retrofit 实现的网络请求库,支持多任务上传下载,断点续传,可选 Rxjava,Rxjava2,retrofit 原生请求
Tags:
介绍
Lychee
是一个基于 Retrofit2 实现的轻量级网络请求库,支持多任务上传,下载,断点续传,使用简单,方便。使用注解简化了 Retrofit2 原有的文件上传方式,支持添加通用请求参数,参数签名(文件使用 md5)
相关文章
- 基于 Retrofit2 实现的 LycheeHttp
- 基于 Retrofit2 实现的 LycheeHttp-使用动态代理实现上传
- 基于 Retrofit2 实现的 LycheeHttp-多任务下载的实现
用法
初始化配置
override fun onCreate() {
super.onCreate()
LycheeHttp.init(MyCoreConfig(this))
}
下载的 API 定义
下载只需要使用 Download
注解 API 就可以啦
@Download
@GET("https://xxxx/xxxx.apk")
fun download(): Call<DownloadBean>
上传的 API 定义
- 根据文件名称的后缀名获取,使用
Upload
进行注解@Upload @Multipart @POST("http://xxx/xxx") fun upload(@Part("file") file: File): Call<ResultBean<UploadResult>>
- 对某个 file 进行注解,使用
FileType("png")
或者FileType("image/png")
@Multipart @POST("http:/xxx/xxx") fun upload(@Part("file") @FileType("png") file: File): Call<ResultBean<UploadResult>>
对整个方法的所有 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>>