【发布时间】:2019-07-06 01:55:16
【问题描述】:
这里是主要活动
class MainActivity : AppCompatActivity() {
private lateinit var mViewModel: MainActivityVm
private lateinit var mTv: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(findViewById(R.id.toolbar))
mTv = findViewById(R.id.tv)
mViewModel =
ViewModelProviders.of(this)
.get(MainActivityVm::class.java)
mViewModel.counter.observe(this, Observer<Int> { counter ->
mTv.setText(counter.toString())
})
fab.setOnClickListener { view ->
if(null != mViewModel.counter.value)
{
mViewModel.counter.value++
}
}
}
// ...
}
当点击 fab 按钮时,我尝试增加数据模型中的计数器
fab.setOnClickListener { view ->
if(null != mViewModel.counter.value)
{
mViewModel.counter.value++
}
}
但我在mViewModel.counter.value++ 行出现错误
智能转换为 'Int' 是不可能的,因为 'mViewModel.counter.value' 是一个复杂的表达式
错误是什么意思?
这是数据模型
class MainActivityVm : ViewModel() {
val counter = MutableLiveData<Int>().apply { postValue(0)}
}
编辑
如果我注释掉空检查
fab.setOnClickListener { view ->
//if(null != mViewModel.counter.value)
//{
mViewModel.counter.value++
//}
}
我得到错误
在 Int 类型的可空接收器上只允许安全 (?.) 或非空断言 (!!.) 调用?
编辑
对!!使用空检查
fab.setOnClickListener { view ->
if(null != mViewModel.counter.value)
{
mViewModel.counter!!.value++
}
}
给出初始错误
智能转换为 'Int' 是不可能的,因为 'mViewModel.counter.value' 是一个复杂的表达式
【问题讨论】:
-
你试试这个
mViewModel.counter?.value++ -
@Leo 是的,然后我得到
Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type Int?