如何通过数据绑定获取 Edittext 值?

How to get Edittext value with databinding?

我有一个这样的 ViewModel:

public class LoginViewModel {

    public final ObservableField<String> email =  new ObservableField<>();
    public final ObservableField<String> password = new ObservableField<>();

    public LoginViewModel() {

我的视图中有两个 editText 和一个按钮:

<EditText
            android:id="@+id/password"
            android:text="@={login.email}"/>
<EditText
            android:id="@+id/password"
            android:text="@={login.password}"/>

<Button android:onClick="onLoginClick"/>

在我的 activity 中,我想在单击按钮时打印两个 edittext 值,类似于:

LoginActivityBinding loginActivityBinding = DataBindingUtil.setContentView(this, R.layout.activity_login);
        Log.e("password", ""+loginActivityBinding.getLogin().password.get());

我得到一个 Nullpointer 异常,我应该如何修改我的代码以获取值。

当您实例化一个 ObservableField 时,默认值为 null。当 EditText 修改值时(即使为空),它将被设置为 non-null 值。然而,在那之前,它是空的。

通过给您的字段一个 non-null 初始值很容易解决这个问题:

public final ObservableField<String> email =  new ObservableField<>("");
public final ObservableField<String> password = new ObservableField<>("");

抱歉,我只想补充一点,您的 ViewModel class 必须继承自 androidx.lifecycle.ViewModel

的 ViewModel()