如何使用数据绑定 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);
}
}
*要检查的事项:
- 检查您的模型是否应该扩展
BaseObservable
以也使用 two-way data binding. Or you can use ObservableField。
- 变量名应从小写字母开始。必须检查 Java Naming Convensions。您已参加
variable name="MyParent"
- 如果您没有将模型传递给 Layout,您将得到
NullPointerException
。就像我在 onCreate()
. 中做的 binding.setResponse(response);
我对 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);
}
}
*要检查的事项:
- 检查您的模型是否应该扩展
BaseObservable
以也使用 two-way data binding. Or you can use ObservableField。 - 变量名应从小写字母开始。必须检查 Java Naming Convensions。您已参加
variable name="MyParent"
- 如果您没有将模型传递给 Layout,您将得到
NullPointerException
。就像我在onCreate()
. 中做的
binding.setResponse(response);