我正在使用API创建应用,并且我在ViewModel中具有功能,该功能需要城市名称才能从网络中获取数据。但这行不通。我已经在Java Android中使用两种方式进行数据绑定,但是在Kotlin情况下出了点问题。在CityViewModel中,我有一个ObservableField,它与一个Edit Text绑定在一起。这是城市名称的地方,然后在单击按钮后启动val currentWeatherByCity,但在日志中是来自API的响应错误。例如,如果我仅将字符串设置为currentWeatherByCity,则“伦敦” API可以工作,但是如果我想使用ObservableField应用程序崩溃。
CityViewModel:
class CityViewModel(
private val weatherRepository: WeatherRepository
): ViewModel() {
val city = ObservableField<String>()
private val metric: String = "metric"
val currentWeatherByCity by lazyDeferred {
weatherRepository.getCurrentWeatherByCity(city.get().toString(), metric)
}
}
CityActivity:
private fun bindUI() = launch(Dispatchers.Main) {
val cityWeather = cityViewModel.currentWeatherByCity.await()
cityWeather.observe(this@CityActivity, Observer {
if (it == null) return@Observer
})
ActivityCity xml:
<EditText android:layout_width="match_parent"
android:layout_height="50dp"
app:layout_constraintTop_toTopOf="parent"
android:gravity="center"
android:foregroundGravity="center_vertical"
android:textColor="@android:color/white"
android:textSize="20sp"
android:text="@={cityViewModel.city}"
android:hint="London/London,uk"
android:id="@+id/city_edit_text"
android:layout_marginEnd="50dp"
app:layout_constraintEnd_toStartOf="@+id/search_city_button"
android:inputType="text"
android:autofillHints="username"/>
我还检查了日志中的ObservableField,city为null。如果我在ObservableField中设置String,那么它是正确的,API会获取数据。