Сериализация данных без сопоставления переменныхAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Сериализация данных без сопоставления переменных

Сообщение Anonymous »

Мой код должен выполнять вызов API погоды и сохранять данные в классах данных с использованием сериализации, однако данные в журнале имеют значение NULL. Когда я удаляю серийные имена и просто называю переменную точно так же, как серийное имя, все работает правильно.
Вызов API и хранение данных:

Код: Выделить всё

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)
}
})
Классы данных

Код: Выделить всё

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, и плагин/зависимости обновлены

Подробнее здесь: https://stackoverflow.com/questions/790 ... -variables
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»