【问题标题】:Smart Cast is not possible in Kotlin在 Kotlin 中无法使用 Smart Cast
【发布时间】:2020-09-25 09:49:21
【问题描述】:

当我从 ViewModel 在活动中调用 api 时,我正在统一 MVVM 模式,它总是给我抛出错误

Smart cast to 'MainActivityViewModel' is impossible, because 'binding.mainModel' is a complex expression    

以下是我的 ViewMode:

class MainActivityViewModel(private val api: SearchAPI) : BaseViewModel() {

private var query: String = ""
    get() = if (field.isEmpty()) "MVVM" else field

private val _refreshing: NotNullMutableLiveData<Boolean> = NotNullMutableLiveData(false)
val refreshing: NotNullMutableLiveData<Boolean>
    get() = _refreshing

lateinit var  _items: NotNullMutableLiveData<RetrofitWrapper>
val items: NotNullMutableLiveData<RetrofitWrapper>
    get() = _items

fun getMainPageData() {
    val params = mutableMapOf<String, String>().apply {
        this["version"] = "v1"
        this["locale"] = "en"
        this["platform"] = "android"
    }

    addToDisposable(api.getHomePageDetail(params).with()
        .doOnSubscribe { _refreshing.value = true }
        .doOnSuccess { _refreshing.value = false }
        .doOnError { _refreshing.value = false }
        .subscribe({
            _items.value = it
        }, {
            // handle errors
        })
    )
}

}   

以下是我的 MainActivity:

class MainActivity : BindingActivity<ActivityMain2Binding>() {
    override fun getLayoutResId(): Int {
        return R.layout.activity_main2
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding.mainModel = getViewModel()
        binding.setLifecycleOwner(this)
        binding.mainModel.getMainPageData()

    }
    }

非常感谢您对此事的帮助,请告诉我为什么会发生这种情况。

【问题讨论】:

    标签: android kotlin mvvm data-binding


    【解决方案1】:

    binding.mainModel 是一个可变的、可为空的变量。

    生成的绑定 setter 方法代码如下所示:

    public void setViewModel(@Nullable MainActivityViewModel viewModel) { ... }

    当您调用binding.mainModel.getMainPageData() 时,它无法推断该变量不为空。

    你可以这样做:

    binding.mainModel!!.getMainPageData()

    或更安全:

    binding.mainModel?.getMainPageData()

    【讨论】:

      猜你喜欢
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多