kej*_*lor 4 android kotlin android-jetpack-compose
我已经按照其他用户的建议实现了导入,androidx.compose.runtime.*但我仍然无法使用observeAsState来显示任何值,例如Text(text = weather.main.temp.toString())可组合元素内部的值。
可组合:
@Composable
fun WeatherAppHomeScreen(weatherViewModel: WeatherViewModel) {
val weather: Weather by weatherViewModel.myResponse.observeAsState()
Text(text = weather.main.temp.toString())
}
Run Code Online (Sandbox Code Playgroud)
数据类:
data class Weather(
@SerializedName("base")
val base: String,
@SerializedName("clouds")
val clouds: Clouds,
@SerializedName("cod")
val cod: Int,
@SerializedName("coord")
val coord: Coord,
@SerializedName("dt")
val dt: Int,
@SerializedName("id")
val id: Int,
@SerializedName("main")
val main: Main,
@SerializedName("name")
val name: String,
@SerializedName("rain")
val rain: Rain,
@SerializedName("sys")
val sys: Sys,
@SerializedName("timezone")
val timezone: Int,
@SerializedName("visibility")
val visibility: Int,
@SerializedName("weather")
val weather: List<WeatherX>,
@SerializedName("wind")
val wind: Wind
)
Run Code Online (Sandbox Code Playgroud)
视图模型类:
class WeatherViewModel : ViewModel() {
val myResponse: MutableLiveData<Weather> = MutableLiveData()
fun getWeather() {
viewModelScope.launch {
myResponse.value = retrofit.getWeather()
}
}
}
Run Code Online (Sandbox Code Playgroud)
该observeAsState()函数返回一个可选值。您可以将其声明为Weather?并用简单的状态替换委托以提供智能转换:
val weatherState: State<Weather?> = weatherViewModel.myResponse.observeAsState()
val weather: Weather? = weatherState.value // allow smart cast
if (weather != null) {
Text(text = weather.main.temp.toString())
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,您可以指定初始值(不确定它是否适用于您的情况),将使用该初始值直到实时数据具有值。在这种情况下,输出将是非可选的:
val weather: Weather by weatherViewModel.myResponse.observeAsState(Weather(...))
Text(text = weather.main.temp.toString())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2392 次 |
| 最近记录: |