kotlin 如何在Android Studio中将API调用中的值获取到ViewModel中?

cxfofazt  于 2023-03-30  发布在  Kotlin
关注(0)|答案(1)|浏览(115)

所以代码是Java和Kotlin的混合。API调用被发出并发送到这个模型类

public class ApiMediaMaxCntInfo {
    @SerializedName("ImageCount")
    private int imageCount;

    @SerializedName("VideoCount")
    private int videoCount;

    public int getImageCount() { return imageCount; }

    public int getVideoCount() { return videoCount; }

}

假设接收两个int值。
它被发送到UI数据层,这些调用被初始化到模型中。
它通过存储库,进入VM,进入Fragment。看起来API调用是在Fragment中进行的,但我不太确定。
虚拟机中的乐趣

fun doCheckMediaMaxCount(): LiveData<Event<UiResponse<UiMediaMaxCount>>>{
        return RxHandleUtil.handleEventPublisherWithContentChange({
            surveySiteSurveyRepository.getMediaMaxCountUC(getApplication())
        }, { maxMediaCountInfo ->
            UiMediaMaxCount(
                maxMediaCountInfo.imageCount,
                maxMediaCountInfo.videoCount)
        })
    }

这就是片段中的乐趣

private fun handleMaxMediaCountCheck() {
        processViewModel.doCheckMediaMaxCount().observe(viewLifecycleOwner, EventObserver { response->
            handleRxResponse(response, object : OnResponseListener<UiMediaMaxCount>(){

                override fun onServerFailResponse(message: String?) {
                    message?.let { it1 -> showError(it1) }
                }

                override fun onInvalidResponse(message: String?) {
                    message?.let { it1 -> showError (it1)  }
                }

                override fun onSuccessResponse(data: UiMediaMaxCount?, message: String?) {
                    data?.let {
                        maxPicCnt = data.imageCount
                        maxVideoCnt = data.videoCount
                    }
                }
            })
        })
    }

正如您所看到的,这些值来自UiMediaMaxCount,但是当我在View Model内部进行调用时,它并没有从API中获取值(总共是3个。2个图像,1个视频)。
UIMediaMaxCount

data class UiMediaMaxCount(
    val imageCount: Int = 0,
    val videoCount: Int = 0
)

如何在VM中设置值

private val imageCnt = UiMediaMaxCount().imageCount
    private val videoCnt = UiMediaMaxCount().videoCount
    private val dataOverflow2 = imageCnt + videoCnt

任何建议都很感激,谢谢。
P.S.这是API响应代码

public class MaxMediaCountInfo {
    private int imageCount;

    private int videoCount;

    public MaxMediaCountInfo(@NonNull ApiMediaMaxCntInfo apiMediaMaxCntInfo) {
        imageCount = apiMediaMaxCntInfo.getImageCount();
        videoCount = apiMediaMaxCntInfo.getVideoCount();
    }

    public MaxMediaCountInfo() {
    
    }

    public int getImageCount() { return imageCount; }

    public int getVideoCount() { return videoCount; }

    
    
}

和回购代码

override fun getMediaMaxCountUC(context: Context): Flowable<UiResponse<MaxMediaCountInfo>> {
    return getUserInfoFromStorage(context).flatMap { userInfo ->
        siteSurveyRemoteResource.getMediaMaxCount(userInfo.userCredential.token)
            .map { apiResponse ->
                val cntInfo = MaxMediaCountInfo(apiResponse.data[0])
                UiResponseFactory.getSuccessUiResponse(cntInfo, apiResponse.message)
            }
    }
}
zsbz8rwp

zsbz8rwp1#

看起来你得到的API响应的等效POJO类是ApiMediaMaxCntInfo。它有两个公共getter方法,imageCountvideoCount都是私有的。所以要访问值,你应该调用getter方法,这是唯一的方法。
所以我觉得调用maxMediaCountInfo.imageCount是不对的,应该这样做maxMediaCountInfo.getImageCount()

相关问题