У меня есть следующий класс сущностей -
@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, но это не то, как я хочу построить свою БД. Так чего же не хватает?