我正在科特林(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() {
答案 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)
}
}