如何使用数据绑定 android 从 pojo 访问 parent 和 child 的值 class

How to access value of parent and child both class from pojo using databinding android

我对 pojo class 的回复是这样的:

{
    "data": {
        "first_name": "test",
        "last_name": "test123",
        "email": "test@gmail.com",
        "user_id": "11"
    },
    "message": "login successfully.",
    "status": "success."
}

并且我想访问 parent 和 child class 等来自上述回复的消息和电子邮件。我怎样才能使用单个 pojo..? 我在这里面临空指针异常。

我的代码是:

<data>
    <variable name="MyParent"
        type="com.package.ParentModel"/>

</data>

<EditText
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:text="@={MyParent.data.email}"
    android:id="@+id/et_email"/>

如何获得 parent 的 属性 和 child 两个 class 相同的 pojo..?

请参考此模型class。它会帮助你。

public class ParentModel {
private String name;
private ChildModel childModel;

public ParentModel(String name) {
    this.name = name;
    childModel=new ChildModel();
    childModel.setName("Apple");

}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public ChildModel getChildModel() {
    return childModel;
}

public void setChildModel(ChildModel childModel) {
    this.childModel = childModel;
}

public  class ChildModel {
    public String name ;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
  }
}

我测试过了。奇怪的!它工作正常。我在这里发布示例代码,您必须自己匹配并查找问题。

activity_sample.xml

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


    <data>

        <variable
            name="response"
            type="com.innovanathinklabs.sample.data.Response" />
    </data>

    <LinearLayout
        ...
        >

        <EditText
              ...
              android:text="@={response.data.email}" />

    </LinearLayout>
</layout>

Response.java(父模型)

public class Response extends BaseObservable {
    private Data data;
    private String message;
    private String status;

    public void setData(Data data) {
        this.data = data;
    }

    public Data getData() {
        return data;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getStatus() {
        return status;
    }
}

Data.java(童模)

public class Data extends BaseObservable {
    private String userId;
    private String lastName;
    private String firstName;
    private String email;

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserId() {
        return userId;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }
}

ActivitySample.java

public class ActivitySample extends AppCompatActivity {
    ActivitySampleBinding binding;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_sample);

        // make dummy response data
        Response response = new Response();
        Data data = new Data();
        data.setEmail("khermaj@gmail.com");
        response.setData(data);

        // pass dummy data in layout
        binding.setResponse(response);
    }
}

*要检查的事项:

  1. 检查您的模型是否应该扩展 BaseObservable 以也使用 two-way data binding. Or you can use ObservableField
  2. 变量名应从小写字母开始。必须检查 Java Naming Convensions。您已参加 variable name="MyParent"
  3. 如果您没有将模型传递给 Layout,您将得到 NullPointerException。就像我在 onCreate().
  4. 中做的 binding.setResponse(response);