ошибка: сущности и POJO должны иметь пригодный для использования конструктор publi c - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть следующий класс сущностей -

@Entity(tableName = Constants.chatsTableName)
data class ChatModelItem(
    @SerializedName("created")
    val created: String,
    @SerializedName("groupId")
    @PrimaryKey
    val groupId: String,
    @SerializedName("groupType")
    @Embedded val groupType: GroupType,
    @SerializedName("joinedAt")
    val joinedAt: String,
    @SerializedName("name")
    val name: String,
    @SerializedName("unreadMessages")
    @Embedded val unreadMessages: List<MessageLogicModel>,
    @SerializedName("userGroupRole")
    @Embedded val userGroupRole: GroupRole,
    @SerializedName("userId")
    val userId: String
) {

    data class MessageLogicModel(val id: String, val groupId: String, val senderUsername: String, val content: String,
                                 val messageType: MessageType, val created: Date)

    enum class GroupType(val value: Int) {

        Single(0), Multiple(1), BusinessChannel(2)
    }

    enum class GroupRole(val value: Int) {
        Reader(0), Writer(1), Editor(2), Admin(3)
    }

    enum class MessageType(val value: Int) {
        Text(0),
        Media(1),
        Link(2),
        Location(3),
    }
}

При запуске моего проекта я получаю действительно досадную, неинформативную ошибку -

/Users/alonshlider/Developer/Android/TwoVerte/app/build/tmp/kapt3/stubs/debug/com/example/twoverte/chats/model/ChatModelItem.java:274: error: Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type).
    public static enum GroupType {
                  ^/Users/alonshlider/Developer/Android/TwoVerte/app/build/tmp/kapt3/stubs/debug/com/example/twoverte/chats/model/ChatModelItem.java:278: error: Cannot find setter for field.
        private final int value = 0;
                          ^error: Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type). - java.util.List/Users/alonshlider/Developer/Android/TwoVerte/app/build/tmp/kapt3/stubs/debug/com/example/twoverte/chats/model/ChatModelItem.java:289: error: Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type).
    public static enum GroupRole {
                  ^/Users/alonshlider/Developer/Android/TwoVerte/app/build/tmp/kapt3/stubs/debug/com/example/twoverte/chats/model/ChatModelItem.java:294: error: Cannot find setter for field.
        private final int value = 0;
                          ^/Users/alonshlider/Developer/Android/TwoVerte/app/build/tmp/kapt3/stubs/debug/com/example/twoverte/chats/model/ChatModelItem.java:7: error: Multiple fields have the same columnName: value. Field names: groupType > value, userGroupRole > value.
public final class ChatModelItem {
             ^/Users/alonshlider/Developer/Android/TwoVerte/app/build/tmp/kapt3/stubs/debug/com/example/twoverte/chats/database/ChatsDao.java:19: error: There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (no such table: chats_table)
    public abstract androidx.lifecycle.LiveData<java.util.List<com.example.twoverte.chats.model.ChatModelItem>> getAllChats();
[WARN] Incremental annotation processing requested, but support is disabled because the following processors are not incremental: androidx.room.RoomProcessor (DYNAMIC).
                                                                                                                ^

Я попробовал следующее -

1) добавить значение по умолчанию для всех файлов

2) добавить вторичный конструктор

ничего не помогает, и это действительно меня расстраивает.

Мне удалось создать объект, который содержал объект типа List и первичный ключ как Int, но это не то, как я хочу построить свою БД. Так чего же не хватает?

...