@Entity
data class Intrusion(
@ColumnInfo(name = "intrusion_id")
@SerializedName("intrusionId")
val intrusionId: String?,
@ColumnInfo(name = "intrusion_filename")
@SerializedName("intrusionFileName")
val intrusionFileName: String?,
@ColumnInfo(name="intrusion_time")
@SerializedName("intrusionTime")
val intrusionTime: String?,
var imageUrl: String?
) {
@PrimaryKey(autoGenerate = true)
var uuid: Int = 0
}
Я получаю JSON данных из Retrofit и пытаюсь сохранить их в базе данных Room. Я хочу создать столбец с именем "imageUrl" и сохранить imageUrl внутри этого столбца. Проблема в том, что я не получаю imageUrl из ответа JSON, мне нужно создать его с использованием некоторого URL-адреса BASE-образа плюс IntrusionFileName.
Итак, мой вопрос заключается в том, как вставить значение во время выполнения внутри imageUrl столбец, чтобы его можно было сохранить?
@Dao
interface IntrusionDao {
//save all data
@Insert
suspend fun insertAll(vararg intrusions: Intrusion): List<Long>
// fetch all data
@Query("SELECT * FROM intrusion")
suspend fun getAllIntrusions(): List<Intrusion>
// get single intrusion data
@Query("SELECT * FROM intrusion WHERE uuid = :intrusionId")
suspend fun getIntrusion(intrusionId: Int): Intrusion
// Delete all data
@Query("DELETE FROM intrusion")
suspend fun deleteAllIntrusions()
}
Выше мой класс DAO.
И вот как я сохраняю данные в базе данных
private fun storeDataLocally(list: List<Intrusion>) {
launch {
// clear prev data
val dao = IntrusionDatabase(getApplication()).intrusionDao()
dao.deleteAllIntrusions()
// expand list into individual elements
val result = dao.insertAll(*list.toTypedArray())
var i = 0
while (i < list.size) {
list[i].uuid = result[i].toInt()
++i
}
}
}
Как видите, я добавляю значение UUID в то время, как l oop, как указано выше, я пытался То же самое для imageUrl, но выдает ошибку ограничения NOT_NULL.
Является ли вышеуказанный метод сохранения данных локально правильным? Как это можно сделать?
Любые отзывы приветствуются. Спасибо