所以这是一个我正在进行的项目,我想保持项目的结构完整。我想我的 API 调用是正确的,因为该项目使用的是 RxJava。我的问题是将 repo 中的调用提升到 ViewModel 中的函数中。它应该从 api 调用中获取图像和视频的计数。我目前(在帮助下)对其进行了硬编码,但现在我正在对它进行 API 调用。
这是数据模型
data class MediaMaxCount(val apiMediaMaxCount: ApiMediaMaxCount){
val imageCount = apiMediaMaxCount.imageCount
val videoCount = apiMediaMaxCount.videoCount
}
回购乐趣
override fun getMediaMaxCountUC(context: Context): Flowable<UiResponse<List<MediaMaxCount>>> {
return GetResourceUtil.getResourceFromDataRepository(context,
object : OnGetFromRepositoryCallBack<List<MediaMaxCount>, ApiMediaMaxCount>{
override fun onGetFromLocalRepository(context: Context): Flowable<List<MediaMaxCount>> {
return Flowable.just(arrayListOf())
}
override fun isLocalDataValid(localData: List<MediaMaxCount>): Boolean {
return localData.isNotEmpty()
}
override fun convertApiDateFormatToLocalDataFormat(remoteData: MutableList<ApiMediaMaxCount>): List<MediaMaxCount> {
val deviceList = mutableListOf<MediaMaxCount>()
for (apiMediaMaxCount in remoteData) {
deviceList.add(MediaMaxCount(apiMediaMaxCount))
}
return deviceList
}
override fun onGetFromRemoteRepository(context: Context): Flowable<ApiResponse<ApiMediaMaxCount>> {
return getUserInfoFromStorage(context).flatMap { userInfo ->
siteSurveyRemoteResource.getMediaMaxCount(
userInfo.userCredential.token
)
}
}
override fun onSaveToLocalRepository(localData: List<MediaMaxCount>): Completable {
return Completable.complete()
}
}
)
}
视图模型乐趣
fun getImageCount(pos: Int): Int {
val count = uiMediaContents.filter { item ->
uiMediaContents.indexOf(item) != pos && item.mediaType == MediaType.MEDIA_TYPE_IMAGE
}.count()
return count
}
fun getVideoCount(pos: Int): Int{
val count = uiMediaContents.filter { item ->
uiMediaContents.indexOf(item) != pos && item.mediaType == MediaType.MEDIA_TYPE_VIDEO
}.count()
return count
}
override fun uploadMediaClick(dataPos: Int) {
_mediaContentEditStartClick.value = Event(
MediaOption(dataPos, MediaOptionType.OPTION_PICK_MEDIA, getImageCount(dataPos), getVideoCount(dataPos))
)
}
override fun takeMediaClick(dataPos: Int) {
_mediaContentEditStartClick.value = Event(
MediaOption(dataPos, MediaOptionType.OPTION_TAKE_MEDIA, getImageCount(dataPos), getVideoCount(dataPos))
)
}
欢迎任何提示或解决方案。谢谢你。