【发布时间】:2019-12-10 04:12:56
【问题描述】:
我在 Kotlin 中做天气应用程序,在 Activity 中是首先从 Room 获取缓存数据,并在一小时后更新数据的方法。但是在数据库中保存数据可能存在问题。我在 Profiles 中检查了 API 日志,天气列表中没有 null,因此 API 工作正常。 我正在尝试将天气列表保存为 ArrayList,但来自日志的答案仍然为空。我也尝试过 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() {
【问题讨论】:
-
您是否考虑过改用Relation?
-
否,但 Relation 与 List 一起工作,而不是与 ArrayList 一起工作。如果我将天气设置为列表,那么我的类型有问题:/
-
对于它的价值,你不必使用
@SerializedName("")用于与json中的值具有相同名称的任何变量 -
@a_local_nobody 谢谢。
-
您确定将其保存到数据库时它不为空吗?
标签: android kotlin retrofit android-room