如何使用数据绑定 android 从 pojo 访问父类和子类的值



我对pojo类的回应是这样的:

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

我想从上面的响应中访问父类和子类,例如消息和电子邮件。我怎样才能使用单个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"/>

如何获得同一 pojo 的父子两类的财产..?

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

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>

响应.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;
    }
}

数据.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;
    }
}

活动样本.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以使用双向数据绑定。或者您也可以使用ObservableField。
  2. 变量名称应从小写字母开始。必须检查 Java 命名会议。你已经采取了variable name="MyParent"
  3. 如果您尚未将模型传递到布局,您将获得NullPointerException。就像我在onCreate() binding.setResponse(response);一样.

请参考这个模型类。它会帮助你。

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;
    }
  }
}

最新更新