gpt4 book ai didi

android - 在 Kotlin 中无法使用 Smart Cast

转载 作者:行者123 更新时间:2023-12-02 13:42:22 26 4
gpt4 key购买 nike

当我从 ViewModel 调用 Activity 中的 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()

}
}

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

最佳答案

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

生成的绑定(bind) setter 方法代码将如下所示:
public void setViewModel(@Nullable MainActivityViewModel viewModel) { ... }
当您调用 binding.mainModel.getMainPageData()它不能推断该变量不为空。

你可以这样做:
binding.mainModel!!.getMainPageData()
或更安全:
binding.mainModel?.getMainPageData()

关于android - 在 Kotlin 中无法使用 Smart Cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62228030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com