Kotlin中的双向数据绑定不起作用

时间:2019-08-17 13:18:57

标签: android kotlin android-databinding android-mvvm

我正在使用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会获取数据。

0 个答案:

没有答案