封装心跳和文件上传API

main
xiaowusky 2 years ago
parent 89db2e60c4
commit 8500eaf385

@ -56,6 +56,10 @@ dependencies {
implementation 'com.github.loper7:DateTimePicker:0.6.3'
//ijk
implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
// retrofit
implementation rootProject.ext.dependencies.retrofit
// rxjava
implementation rootProject.ext.dependencies.rxjava
implementation 'com.google.android.material:material:1.5.0'
annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.0.0'

@ -0,0 +1,32 @@
package com.yinuo.safetywatcher.watcher.net
import com.common.commonlib.net.BaseObserve
import com.common.commonlib.net.bean.BaseResponse
import com.common.commonlib.net.callback.RequestNoResultCallBack
import io.reactivex.rxjava3.core.Observable
import retrofit2.http.FormUrlEncoded
import retrofit2.http.GET
import retrofit2.http.Query
/**
* 心跳
*/
class HeartbeatApi : BaseObserve<HeartbeatApi.Api>(Api::class.java) {
open fun heartBeat(sn: String) {
observe(api.heartBeat(sn), object : RequestNoResultCallBack<BaseResponse>() {
override fun onError(error: String?) {
}
override fun onComplete() {
}
})
}
interface Api {
@GET("xx/xxx")
@FormUrlEncoded
fun heartBeat(@Query("sn") sn: String): Observable<BaseResponse>
}
}

@ -0,0 +1,76 @@
package com.yinuo.safetywatcher.watcher.net
import com.common.commonlib.net.BaseObserve
import com.common.commonlib.net.bean.BaseResponse
import com.common.commonlib.net.callback.RequestResultCallBack
import io.reactivex.rxjava3.core.Observable
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.asRequestBody
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
import retrofit2.http.PartMap
import java.io.File
/**
* 文件上传
*/
class UploadFileApi : BaseObserve<UploadFileApi.Api>(Api::class.java) {
open fun singleUpload(path: String) {
observe(
api.singleUpload(makeMultipartBodyPart(path)),
object : RequestResultCallBack<BaseResponse>() {
override fun onResult(result: BaseResponse) {
}
override fun onError(error: String?) {
}
})
}
open fun multiUpload(paths: List<String>) {
observe(
api.multiUpload(makefileMaps(paths)),
object : RequestResultCallBack<BaseResponse>() {
override fun onResult(result: BaseResponse) {
}
override fun onError(error: String?) {
}
})
}
interface Api {
@Multipart
@POST("xxx/upload")
fun singleUpload(@Part file: MultipartBody.Part?): Observable<BaseResponse>
@Multipart
@POST("xxx/uploads")
fun multiUpload(@PartMap fileMap: Map<String, MultipartBody.Part>): Observable<BaseResponse>
}
private fun makefileMaps(paths: List<String>): Map<String, MultipartBody.Part> {
val map = HashMap<String, MultipartBody.Part>()
paths.forEach {
val file = File(it)
val part = makeMultipartBodyPart(it)
map["file; filename=${file.name}"] = part
}
return map
}
private fun makeMultipartBodyPart(path: String): MultipartBody.Part {
val file = File(path)
//构建requestbody
val requestFile: RequestBody =
file.asRequestBody("multipart/form-data".toMediaTypeOrNull())
//将resquestbody封装为MultipartBody.Part对象
return MultipartBody.Part.createFormData("file", file.name, requestFile)
}
}
Loading…
Cancel
Save