hegaojian / JetpackMvvm

:chicken::basketball:一个Jetpack结合MVVM的快速开发框架,基于MVVM模式集成谷歌官方推荐的JetPack组件库:LiveData、ViewModel、Lifecycle、Navigation组件 使用Kotlin语言,添加大量拓展函数,简化代码 加入Retrofit网络请求,协程,帮你简化各种操作,让你快速开发项目
https://github.com/hegaojian/JetpackMvvm
Apache License 2.0
3.15k stars 614 forks source link

大佬,关于livedate更新数据的回调的问题请教一下 #14

Closed ilatent closed 4 years ago

ilatent commented 4 years ago

我看项目使用livedata更新数据,是在外面有包装了一层ListDataUiState or UpdateUiState。如果是列表还好,如果出现异常,可以使用arrayListOf()设置默认值,但是UpdateUiState如果请求时出现异常,那包装成UpdateUiState对象,data该怎么穿,我尝试设置成data: T?和T: Any都不行,我看项目中data类型全都是Int,可以设置0,我的都是数据类型,不知道该怎么穿,麻烦大佬看一下

hegaojian commented 4 years ago

这个情况我之前没有考虑到,刚想了一下,你可以这么写,将UpdateUiState data设置可为空,并给个默认值null

data class UpdateUiState<T>(
    //请求是否成功
    var isSuccess: Boolean = true,
    //操作的对象
    var data: T? = null,
    //请求失败的错误信息
    var errorMsg: String = ""
)

在使用的时候就可以不用传递一个data值给它了,只要给个泛型就OK

  val uistate = UpdateUiState<Int>(isSuccess = false, errorMsg = it.errorMsg)
  updateDataState.postValue(uistate)

当然了,data可为空,所以如果操作成功后需要用到这个值,虽然成功后data肯定不为null,但是你还是要处理非空操作,或者直接 !!