首页 > 解决方案 > 尝试使用 MutableLiveData 值时出现 NullPointerException

问题描述

这是我的视图模型

 class ManualInputViewModel : ViewModel() {
    var username: MutableLiveData<String>? = null
    var password: MutableLiveData<String>? = null

    fun onClickLogin(view: View){
        view.context.toast(username?.value!!)
    }
 }

这是我的活动

class ManualInputActivity : AppCompatActivity() {

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

    var binding : ActivityManualInputBinding = DataBindingUtil.setContentView(this,R.layout.activity_manual_input)
    var viewModel = ViewModelProviders.of(this).get(ManualInputViewModel::class.java)
    binding.viewmodel = viewModel
    binding.lifecycleOwner = this
}
}

这是我用于编辑文本的 xml 代码

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:inputType="text"
        android:hint="Username"
        android:drawableLeft="@drawable/ic_person_black_24dp"
        android:text="@={viewmodel.username}"/>

我只想敬酒用户名,但我收到错误消息

com.aseemsalim.databindingpractice.ui.rubikscube.colorinput.ManualInputViewModel.onClickLogin 处的 kotlin.KotlinNullPointerException(ManualInputViewModel.kt:15)

标签: androidkotlinandroid-databinding

解决方案


您必须初始化 LiveData 属性:

class ManualInputViewModel : ViewModel() {
    var username = MutableLiveData<String>()
    var password = MutableLiveData<String>()

    fun onClickLogin(view: View){
        view.context.toast(username.value)
    }
 }

推荐阅读