Как получить доступ к значению родительского и дочернего обоих классов из Pojo с помощью привязки данных Android - PullRequest
0 голосов
/ 09 февраля 2019

Моя реакция на класс 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 ..?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Я проверял это.Странный!Работало нормально.Я публикую здесь пример кода, вы должны найти и найти свою проблему.

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 для использования двусторонней привязки данных .Или вы можете использовать ObservableField .
  2. имена переменных должны начинаться со строчной буквы.Необходимо проверить Java Naming Convensions .Вы взяли variable name="MyParent"
  3. Вы получите NullPointerException, если вы не передали модель в Layout.Как и я binding.setResponse(response); в onCreate().
0 голосов
/ 09 февраля 2019

Пожалуйста, обратитесь к этой модели класса.Это тебе поможет.

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