[NullPointerException,当尝试使用MutableLiveData值时

问题描述 投票:0回答:2

这是我的ViewModel

 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}"/>

我只想举起用户名,但出现错误

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

android kotlin android-databinding
2个回答
1
投票

您必须初始化LiveData属性:

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

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

0
投票

将视图模型变量绑定到视图时的第一件事是,应该像这样,为该变量设置getter和setter方法。

fun getUsername():String
{
    return username?.value!!//this is because username variable is MutableLiveData
}
fun setUsername(username:String?)
{
    this.username.value=username //this is bcoz username variable is MutableLiveData
}

使用MutableLiveData时,不能像这样设置数据

android:text="@={viewmodel.username}"因为android:text将返回字符串,并且您无法将string设置为MutableLiveData。您确实喜欢此MutableLiveData.value=string

最后一次,当您声明livedata时,您都应这样声明:>

var username = MutableLiveData<String>()

由于此而出错,并且edittext的值无法分配给variable中的viewmodel

© www.soinside.com 2019 - 2024. All rights reserved.