Android 无法使双向数据绑定正常工作

Android 无法使双向数据绑定正常工作,android,data-binding,Android,Data Binding,我想在单击按钮时将EditTexts的值绑定到POJO,但POJO为空。以下是我编写的代码:- 主要活动:- public class MainActivity extends AppCompatActivity { ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanc

我想在单击按钮时将
EditText
s的值绑定到POJO,但POJO为空。以下是我编写的代码:-

主要活动:-

public class MainActivity extends AppCompatActivity {


    ActivityMainBinding binding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        ButterKnife.bind(this);
    }

    @OnClick(R.id.button)
    public void submit()
    {
        Log.d("myapplication",binding.getUser()); // NullPointerException
    }
}
activity_main.xml:-

<?xml version="1.0" encoding="utf-8"?>

<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="user"
            type="com.paragkadam.databindingsample.User"/>
    </data>


    <RelativeLayout

        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.paragkadam.databindingsample.MainActivity">

    <EditText
        android:id="@+id/first_name_edittext"
        android:layout_margin="10dp"
        android:hint="First name"
        android:text="@={user.firstName}"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <EditText
        android:id="@+id/last_name_edittext"
        android:layout_margin="10dp"
        android:hint="Last name"
        android:text="@={user.lastName}"
        android:layout_below="@+id/first_name_edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/button"
        android:layout_margin="10dp"
        android:layout_below="@+id/last_name_edittext"
        android:text="Submit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    </RelativeLayout>

</layout>

我认为您得到的是NullPointerException,因为您没有设置用户值

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        binding.setUser(new User("FirstName","LastName"));
    }

我认为您得到的是NullPointerException,因为您没有设置用户值

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        binding.setUser(new User("FirstName","LastName"));
    }

第一个双向数据绑定不需要事件,只要@={}将在视图上执行的每个事件上设置变量

其次,您编写以在数据绑定中显示的每个变量都需要设置else check以进行NULL检查 在oncreate方法上未调用binding.setuser时,它将为null,binding将调用 User.name在文本视图中设置它,这将最终导致空指针

还可以查看绑定文档 他们已经定了 @可绑定到变量
以及更改的通知属性

第一个双向数据绑定不需要事件,只需@={}将在视图上执行的每个事件上设置变量

其次,您编写以在数据绑定中显示的每个变量都需要设置else check以进行NULL检查 在oncreate方法上未调用binding.setuser时,它将为null,binding将调用 User.name在文本视图中设置它,这将最终导致空指针

还可以查看绑定文档 他们已经定了 @可绑定到变量
除了通知的属性已更改外

Yes在调用setUser()方法后,空指针异常将消失。但我的问题是——数据绑定库本身不应该设置用户pojo的值,而不是显式调用setUser()。我希望EditText的值附加到pojo用户。不,数据绑定本身不会设置值。您必须通过相应的setter方法自行设置
data
标记中的所有变量值。通过
setUser()
方法传递
User
类的实例后,它将附加到edittext,您可以在该
User
对象中获取edittext的文本。这是否意味着我只需设置一次pojo,并且当edittext上的文本发生更改时,模型自动设置为更新值?是,调用setUser()方法后,空指针异常消失。但我的问题是——数据绑定库本身不应该设置用户pojo的值,而不是显式调用setUser()。我希望EditText的值附加到pojo用户。不,数据绑定本身不会设置值。您必须通过相应的setter方法自行设置
data
标记中的所有变量值。通过
setUser()
方法传递
User
类的实例后,它将附加到edittext,您可以在该
User
对象中获取edittext的文本。这是否意味着我只需设置一次pojo,并且当edittext上的文本发生更改时,是否使用更新的值自动设置模型?