Мой код должен выполнять вызов API погоды и сохранять данные в классах данных с использованием сериализации, однако данные в журнале имеют значение NULL. Когда я удаляю серийные имена и просто называю переменную точно так же, как серийное имя, все работает правильно.
Вызов API и хранение данных:
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerialName
@Serializable
data class WeatherResults(
val current: Current? = null,
val daily: Daily? = null,
val hourly: Hourly? = null
)
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerialName
@Serializable
data class Current(
@SerialName("temperature_2m") val temperature: Double?, // Works as expected
@SerialName("apparent_temperature") val apparentTemperature: Double?,
@SerialName("relative_humidity_2m") val relativeHumidity: Int?, // Matches JSON
@SerialName("weather_code") val weatherCode: Int?,
@SerialName("wind_speed_10m") val windSpeed: Double?,
@SerialName("wind_direction_10m") val windDirection: Double?,
val visibility: Int?,
val time: String
)
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerialName
@Serializable
data class Daily(
val time: List?,
@SerialName("weather_code") val weatherCode: List?,
@SerialName("temperature_2m_max") val temperatureMax: List?,
@SerialName("temperature_2m_min") val temperatureMin: List?,
@SerialName("precipitation_probability_max") val precipitationProbability: List?,
@SerialName("apparent_temperature_max") val apparentTemperatureMax: List?,
@SerialName("apparent_temperature_min") val apparentTemperatureMin: List?,
val sunrise: List?,
val sunset: List?,
@SerialName("sunshine_duration") val sunshineDuration: List?,
@SerialName("uv_index_max") val uvIndexMax: List?
)
Я попробовал удалить сериализацию и просто назвать переменные соответствующим образом, и данные сохранились правильно. Я также проверил свой Gradle, и плагин/зависимости обновлены
Мой код должен выполнять вызов API погоды и сохранять данные в классах данных с использованием сериализации, однако данные в журнале имеют значение NULL. Когда я удаляю серийные имена и просто называю переменную точно так же, как серийное имя, все работает правильно. Вызов API и хранение данных: [code]api.getWeatherData( location.latitude, location.longitude, "temperature_2m,relative_humidity_2m,apparent_temperature,precipitation,weather_code,wind_speed_10m,wind_direction_10m", "visibility", "temperature_2m_max,temperature_2m_min,sunrise,sunset,daylight_duration,uv_index_max", "auto", 1 ).enqueue(object : Callback { // Change to WeatherResults @RequiresApi(Build.VERSION_CODES.O) override fun onResponse(call: Call, response: Response) { // Provide more detailed error messages based on response code if necessary if (response.isSuccessful) { response.body()?.let { weatherCache.updateCache(it) // Update the weather cache Log.d("API Call", "Full API Response: ${response.body()}") onSuccess(it) } ?: onFailure(Throwable("Response body is null")) } else { onFailure(Throwable("Error: ${response.code()}")) } }
override fun onFailure(call: Call, t: Throwable) { onFailure(t) } }) [/code] Классы данных [code]import kotlinx.serialization.Serializable import kotlinx.serialization.SerialName
@Serializable data class WeatherResults( val current: Current? = null, val daily: Daily? = null, val hourly: Hourly? = null ) [/code] [code]import kotlinx.serialization.Serializable import kotlinx.serialization.SerialName
@Serializable data class Current( @SerialName("temperature_2m") val temperature: Double?, // Works as expected @SerialName("apparent_temperature") val apparentTemperature: Double?, @SerialName("relative_humidity_2m") val relativeHumidity: Int?, // Matches JSON @SerialName("weather_code") val weatherCode: Int?, @SerialName("wind_speed_10m") val windSpeed: Double?, @SerialName("wind_direction_10m") val windDirection: Double?, val visibility: Int?, val time: String ) [/code] [code]import kotlinx.serialization.Serializable import kotlinx.serialization.SerialName
@Serializable data class Daily( val time: List?, @SerialName("weather_code") val weatherCode: List?, @SerialName("temperature_2m_max") val temperatureMax: List?, @SerialName("temperature_2m_min") val temperatureMin: List?, @SerialName("precipitation_probability_max") val precipitationProbability: List?, @SerialName("apparent_temperature_max") val apparentTemperatureMax: List?, @SerialName("apparent_temperature_min") val apparentTemperatureMin: List?, val sunrise: List?, val sunset: List?, @SerialName("sunshine_duration") val sunshineDuration: List?, @SerialName("uv_index_max") val uvIndexMax: List? )
[/code] Я попробовал удалить сериализацию и просто назвать переменные соответствующим образом, и данные сохранились правильно. Я также проверил свой Gradle, и плагин/зависимости обновлены