Чего я пытаюсь достичь. * {
"cod":"200",
"message":0,
"cnt":40,
"list":[
{
"dt":1590602400,
"main":{
"temp":306.2,
"feels_like":306.4,
"temp_min":306.07,
"temp_max":306.2,
"pressure":1006,
"sea_level":1004,
"grnd_level":950,
"humidity":41,
"temp_kf":0.13
},
"weather":[
{
"id":802,
"main":"Clouds",
"description":"scattered clouds",
"icon":"03n"
}
],
"clouds":{
"all":48
},
"wind":{
"speed":3.72,
"deg":183
},
"sys":{
"pod":"n"
},
"dt_txt":"2020-05-27 18:00:00"
},
{
"dt":1590613200,
"main":{
"temp":305.05,
"feels_like":303.65,
"temp_min":304.7,
"temp_max":305.05,
"pressure":1004,
"sea_level":1003,
"grnd_level":949,
"humidity":38,
"temp_kf":0.35
},
"weather":[
{
"id":803,
"main":"Clouds",
"description":"broken clouds",
"icon":"04n"
}
],
"clouds":{
"all":68
},
"wind":{
"speed":4.72,
"deg":197
},
"sys":{
"pod":"n"
},
"dt_txt":"2020-05-27 21:00:00"
},
{
"dt":1590624000,
"main":{
"temp":302.97,
"feels_like":304.29,
"temp_min":302.74,
"temp_max":302.97,
"pressure":1004,
"sea_level":1004,
"grnd_level":949,
"humidity":46,
"temp_kf":0.23
},
"weather":[
{
"id":802,
"main":"Clouds",
"description":"scattered clouds",
"icon":"03n"
}
],
"clouds":{
"all":47
},
"wind":{
"speed":1.48,
"deg":196
},
"sys":{
"pod":"n"
},
"dt_txt":"2020-05-28 00:00:00"
}
],
"city":{
"id":1269843,
"name":"Hyderabad",
"coord":{
"lat":17.3753,
"lon":78.4744
},
"country":"IN",
"population":3597816,
"timezone":19800,
"sunrise":1590538296,
"sunset":1590585318
}
}
на основе ответа json у меня есть следующие классы данных для схемы комнаты Record.class @Entity(tableName = "Record")
data class Record(
@PrimaryKey(autoGenerate = true)
val rid:Long,
@SerializedName("dt_txt")
val dtTxt: String,
@Embedded(prefix = "main_")
val main: Main,
@Embedded(prefix = "rain_")
val rain: Rain,
@Embedded(prefix = "wind_")
val wind: Wind
)
Weather.class @Entity(
tableName = "weather",
foreignKeys = [
ForeignKey(
entity = Record::class,
parentColumns = ["rid"],
childColumns = ["wid"],
onDelete = CASCADE
)
])
data class Weather(
@PrimaryKey(autoGenerate = true)
val wid:Long,
val description: String,
val icon: String,
val id: Int,
val main: String
)
WeatherRecord.class class WeatherRecord (
@Embedded
val record: Record,
@Relation(parentColumn = "rid", entityColumn = "wid")
val weather:List<Weather>
)
и наличие других классов, таких как Rain, Main, Wind, City и т. Д. c. Теперь у меня есть класс Response WeatherResponse.class data class WeatherResponse(
val city: City,
val cnt: Int,
val cod: String,
val list: List<Record>,
val message: Int
)
То, что я делал до сих пор
в соответствии с ответом JSON легко понять, что Weather должно быть полем внутри класса Record, но его там нет, это потому, что Weather приходит в виде списка, из-за этого я использовал внешний ключ и несколько небольших уловок (как указано в следующем ответе (Android Комната - H andling Список объектов в объекте и результат запроса ) в моих запросах Dao, чтобы сохранить список и получить список погоды в базе данных
Dao Class
@Dao
interface WetherDataDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun upsert(data: Record)
@Insert
fun insert(weather:List<Weather>)
@Transaction
fun insert(weatherRecord: WeatherRecord){
upsert(weatherRecord.record)
insert(weatherRecord.weather)
}
@Query("Select * from Record")
fun getAllRecords():LiveData<WeatherRecord>
}
Какая у меня проблема?
Итак, прежде чем приступить к работе с комнатой, я получаю правильный ответ (ie погода идет как часть записи), но после этого я не получаю погоду как часть записи и нигде больше. Я попытался решить проблему, изменив тип списка с Record на WeatherRecord внутри класса WeatherRecord, но это также не решило мою проблему (он просто печатает путь к классу с некоторыми кодами, см. снимок экрана ), так что может ли кто-нибудь помочь мне вывести меня из этой проблемы, вы можете предложить мне любое другое возможное решение, которое может изменить всю схему проектирования базы данных, я буду рад узнать
Поскольку я новичок в этой комнате, вы можете предложить мне несколько интересных блогов о том, как я могу разработать схемы базы данных для такого рода сложных баз данных
Заранее спасибо