Java Android数据绑定:为什么getVariable()没有更新?

Java Android数据绑定:为什么getVariable()没有更新?,java,android,data-binding,Java,Android,Data Binding,我已经开始为一个新项目使用数据绑定。我已经能够使用binding.setVariable(myVariable)在EditText中为一个经典用户表单(lastname、firstname、email…)设置值 我想按用户保存编辑过的信息,所以我尝试使用binding.getVariable()。但在用户编辑编辑文本后,不会更新值(lastname、firstname…)。那么,有没有可能像这样使用它,而我做得不对,或者我们只能像这样更新编辑文本 String name = binding.ed

我已经开始为一个新项目使用数据绑定。我已经能够使用binding.setVariable(myVariable)在EditText中为一个经典用户表单(lastname、firstname、email…)设置值

我想按用户保存编辑过的信息,所以我尝试使用binding.getVariable()。但在用户编辑编辑文本后,不会更新值(lastname、firstname…)。那么,有没有可能像这样使用它,而我做得不对,或者我们只能像这样更新编辑文本

String name = binding.editText_lastname.getText().toString();
下面是我保存数据的方法(顺便说一下,我使用的是Reformation2和Realm):


谢谢

您的表达式是双向数据绑定表达式吗?e、 g.
android:text=“@={variable}”
是的,在我的xml中我有android:text=“@={userViewModel.firstname}”,例如,它应该可以工作。每当用户更改文本时,您应该看到调用了
UserViewModel.setFirstname()
。如果没有setter,则应更新该字段。如果用户为null,您将不会看到任何错误,所以一定要检查它。此外,请确认您正在检查UserViewModel,而不是域。如果您的UserViewModel在值更改时不更新域,则可能看不到值的更改。您的表达式是双向数据绑定表达式吗?e、 g.
android:text=“@={variable}”
是的,在我的xml中我有android:text=“@={userViewModel.firstname}”,例如,它应该可以工作。每当用户更改文本时,您应该看到调用了
UserViewModel.setFirstname()
。如果没有setter,则应更新该字段。如果用户为null,您将不会看到任何错误,所以一定要检查它。此外,请确认您正在检查UserViewModel,而不是域。如果您的UserViewModel在值更改时不更新域,则您可能看不到值的更改。
public void saveBtnClick(View view) {

    String name = binding.lastname.getText().toString(); //here I have the new value, after I edited the EditText


    ProfileREST profileREST = LoginREST.retrofit.create(ProfileREST.class);
    profileREST.updateUser(new ProfileBody(binding.getUserviewmodel().getUser()))
            .enqueue(new Callback<User>() { //here I'm getting User object using data binding, values haven't been updated
        @Override
        public void onResponse(Call<User> call, Response<User> response) {

            realm.beginTransaction();
            user.firstname = binding.getUserviewmodel().getUser().firstname;
            user.lastname = binding.getUserviewmodel().getUser().firstname;
            user.phoneNumber = binding.getUserviewmodel().getUser().firstname;
            user.isDarkMode = binding.getUserviewmodel().getUser().isDarkMode;
            realm.commitTransaction();
        }

        @Override
        public void onFailure(Call<User> call, Throwable t) {
            Toast.makeText(EditProfileActivity.this, getString(R.string.network_error), Toast.LENGTH_SHORT).show();
        }
    });
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = DataBindingUtil.setContentView(this, R.layout.activity_edit_profile);
    binding.getRoot().requestFocus();
    setSupportActionBar(binding.toolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);


    realm = Realm.getDefaultInstance();
    user = realm.where(User.class).findFirst();
    if(user != null) {
        UserViewModel userViewModel = new UserViewModel(user);
        binding.setUserviewmodel(userViewModel);
    }

}