房间数据库中的空数组列表

时间:2019-08-01 14:19:39

标签: android kotlin retrofit android-room

我正在科特林(Kotlin)做气象应用程序,在Activity中,该方法首先从Room获取缓存数据,然后在一个小时后更新数据。但是在数据库中保存数据可能存在问题。我在“个人资料”中检查了API日志,并且“天气列表”没有null,因此API可以正常工作。 我正在尝试将天气列表另存为ArrayList,但是日志中的答案仍然为null。我也尝试了Type Converter,但还是没有。也许有人会找到我问题的原因和答案。

编辑:我删除了ArrayList上方的@Embedded(prefix =“ weather_”),它可以正常工作。

CurrentWeather(存储Weather ArrayList):

@Entity(tableName = "current_weather")
data class CurrentWeather(
@Embedded(prefix = "weather_")
val weather: ArrayList<Weather>? = ArrayList(), //here is my problem
@SerializedName("base")
val base: String,
@Embedded(prefix = "clouds_")
val clouds: Clouds,
@SerializedName("cod")
val cod: Int,
@Embedded(prefix = "coord_")
val coord: Coord,
@SerializedName("dt")
val dt: Int,
@SerializedName("id")
val id: Int,
@Embedded(prefix = "main_")
val main: Main,
@SerializedName("name")
val name: String,
@Embedded(prefix = "sys_")
val sys: Sys,
@SerializedName("visibility")
val visibility: Int,
@Embedded(prefix = "wind_")
val wind: Wind

) {
@PrimaryKey(autoGenerate = false)
var idKey: Int = CURRENT_WEATHER_ID
}

天气:

data class Weather(
@SerializedName("description")
val description: String,
@SerializedName("icon")
val icon: String,
@SerializedName("id")
val id: Int,
@SerializedName("main")
val main: String
)

转换器:

class Converters {

@TypeConverter
fun arrayListToJson(value: List<Weather>?): String {
    return  Gson().toJson(value)
}

@TypeConverter
fun jsonToArrayList(value: String): List<Weather> {
    val objects = Gson().fromJson(value, Array<Weather>::class.java) as   Array<Weather>
    val list = objects.toList()
    return list
}

数据库:

@Database(entities = [CurrentWeather::class, Location::class], version = 15, exportSchema = false)
@TypeConverters(Converters::class) //converter initialization
abstract class WeatherDatabase : RoomDatabase() {

1 个答案:

答案 0 :(得分:1)

这是修改后的转换器类。可能会对您有帮助。

object class Converters {

    val gson = Gson()

    @TypeConverter
    fun arrayListToJson(list: List<Weather>?): String? {
        return if(list == null) null else gson.toJson(list)
    }

    @TypeConverter
    fun jsonToArrayList(jsonData: String?): List<Weather>? {
        return if (jsonData == null) null else gson.fromJson(jsonData, object : TypeToken<List<Weather>?>() {}.type)
    }
}