Почему бы не сделать свой список изображений простым списком строк?(Вы можете использовать typealias в kotlin, если хотите придерживаться изображения)
У вас есть 2 варианта, в зависимости от того, как вам нужен доступ к вашим Image объектам.Вы в порядке, чтобы получить список изображений только из вашего объекта Directory , или вам нужны некоторые запросы к вашим изображениям в БД?(например, count, findBy и т. д.)
1-й вариант , если вы просто хотите получить список изображений в вашем объекте Directory (вероятно, лучший для вашего случая):
@Entity(tableName = "directory")
class Directory(@PrimaryKey(autoGenerate = false) var id: Int,
@ColumnInfo(name = DIR_NAME) var dirName: String,
@ColumnInfo(name = "images")
@TypeConverters(ImagesConverters::class)
var dirImages: List<Images>)
где ImagesConverters.kt :
public class ImagesConverters {
/**
* Convert a a list of Images to a Json
*/
@TypeConverter
fun fromImagesJson(stat: List<Images>): String {
return Gson().toJson(stat)
}
/**
* Convert a json to a list of Images
*/
@TypeConverter
fun toImagesList(jsonImages: String): List<Images> {
val notesType = object : TypeToken<List<Images>>() {}.type
return Gson().fromJson<List<Images>>(jsonImages, notesType)
}
}
Не забудьте добавить gson в ваш файл Gradle:
implementation 'com.google.code.gson:gson:2.8.4'
InВ вашей таблице " Directory " список изображений будет храниться непосредственно в столбце " images " в формате json.
2-й вариант, если вы просто хотите создать другую таблицу для ваших изображений и выполнить запросы к ним.
Вам нужно будет использовать отношения один ко многим и иметь 3 объекта:
// directory.kt
@Entity(tableName = "directory")
class Directory(@PrimaryKey(autoGenerate = false) var id: Int,
@ColumnInfo(name = DIR_NAME) var dirName: String)
// image.kt
@Entity(tableName = "images")
class Image(@PrimaryKey(autoGenerate = false) var id: Int,
@ColumnInfo(name ="images") var image: String,
@ColumnInfo(name ="directoryId") var directoryId: Int)
// directoryWithImages.kt
public class DirectoryWithImages {
@Embedded
public Directory directory;
@Relation(parentColumn = "id", entityColumn = "directoryId", entity = Image.class)
public List<Image> images;
}
И, наконец, ваш дао:
@Dao
public interface LoadDirectoryWithImagesDao {
@Query("SELECT * FROM directory")
public List<DirectoryWithImages> loadDirectoriesWithImages();
}
Надеюсь, это поможет!