Как использовать класс сущности, который расширяет другой класс в комнате? - PullRequest
0 голосов
/ 08 ноября 2018

Я пытался найти все, но не нашел решения. Один вопрос похож, но никто не ответил на него должным образом. Переходя к вопросу, у меня есть класс, который имеет аннотацию объекта комнаты, и тот же класс расширяет другой класс (который является классом библиотеки). Теперь, когда я запускаю проект, я получаю сообщение об ошибке типа Ошибка: не удается найти получатель для поля. Проблема создания суперкласса библиотеки здесь, так как она работает, когда я ее удаляю. Пожалуйста, скажите мне, как я могу заставить комнату работать с подклассом как сущностью, расширяющей суперкласс. Спасибо за ваше время.

    @Entity(tableName = "event")
public class EventDetails extends ParentEntity implements Parcelable{

    @PrimaryKey(autoGenerate = true)
    int id;

    String name;
    Calendar startDay = Calendar.getInstance();
    Calendar endDay = Calendar.getInstance();

public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Calendar getStartDay() {
        return startDay;
    }

    public void setStartDay(Calendar startDay) {
        this.startDay = startDay;
    }

    public Calendar getEndDay() {
        return endDay;
    }

    public void setEndDay(Calendar endDay) {
        this.endDay = endDay;
    }

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

    @Override
    public String getName() {
        return name;
    }
}



public class ParentEntity {
    private Calendar mDay;


    public Calendar getmDay() {
        return mDay;
    }

    public void setmDay(Calendar mDay) {
        this.mDay = mDay;
    }

}

1 Ответ

0 голосов
/ 08 ноября 2018

В основном это проблема именования: после изменения имени поля с mDay на day и соответствующего переименования установщика / получателя все компилируется.

Похоже, что имена методов, которые генерирует Android Studio из mDay , не являются теми, которые ищет Room.

Поскольку вы можете использовать разные имена полей в родительском классе, это выглядит как лучшее решение.

Если невозможно изменить библиотеку, особенно невозможно пометить поля в классе библиотеки с помощью Ignore, поэтому невозможно решить проблему, вставив промежуточный класс в иерархию наследования. (Я пытался использовать конструктор для EventDetails с закрытым полем в качестве аргумента, но это тоже не сработало)

Так что в этом случае я думаю, что вашим лучшим вариантом было бы не пытаться расширяться от класса библиотеки (но, возможно, от некоторого класса «суррогатного родителя») и ликвидировать разрыв с классом библиотеки с помощью некоторого класса фабрики. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...