Lychee
是一个基于Retrofit2实现的轻量级网络请求库,支持多任务上传,下载,断点续传,使用简单,方便。使用注解简化了Retrofit2原有的文件上传方式,支持添加通用请求参数,参数签名(文件使用md5)
override fun onCreate() {
super.onCreate()
LycheeHttp.init(MyCoreConfig(this))
}
下载只需要使用 Download
注解API就可以啦
@Download
@GET("https://xxxx/xxxx.apk")
fun download(): Call<DownloadBean>
- 根据文件名称的后缀名获取,使用
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>
//普通请求
getService<API>().hello().request {
onSuccess = { Toast.makeText(App.app, it.data ?: "", Toast.LENGTH_SHORT).show() }
onErrorMessage = {}
onCompleted = {}
}
//单个文件下载
getService<API>().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就可以用了哟
/**
* 整个请求库的核心配置接口
* 默认配置
* @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>
}
如果你不喜欢用RxJava,只用kotlin 可以这样定义
@POST("hello")
fun hello(): Call<ResultBean<String>>
如果你喜欢用RxJava或者RxJava2
@POST("hello")
fun hello(): Observable<ResultBean<String>>