Вставьте imageUrl в столбец комнаты после формирования URL из столбца данных, извлеченных из Retrofit - PullRequest
0 голосов
/ 20 января 2020
@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.

Является ли вышеуказанный метод сохранения данных локально правильным? Как это можно сделать?

Любые отзывы приветствуются. Спасибо

...