如何通过数据绑定获取 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()
我有一个这样的 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