android - несоответствие типов в представлении модели с использованием MutableLiveData - PullRequest
0 голосов
/ 14 октября 2019

Я использую архитектуру mvvm в своем приложении, это мой код:

class ProductRepository : BaseRepository() {

   private val mutableLiveData = MutableLiveData<ProductsModel>()

   fun getProducts(catId: String): MutableLiveData<ProductsModel> {
        if (internetAvailable) {
            scope.launch {
                val request = api.getProducts(catId)
                withContext(Dispatchers.Main) {
                    try {
                        val response = request.await()
                        mutableLiveData.value = response


                    } catch (e: HttpException) {
                        // Log exception //
                        Log.v("this", e.message);

                    } catch (e: Throwable) {
                        // Log error //)
                        Log.v("this", e.message);
                    }
                }
            }
        }
        return mutableLiveData
    }
}

хранилище возвращает MutableLiveData по значению ProductsModel. Это мой класс viewModel:

class ProductsViewModel :ViewModel(){
    val repository=ProductRepository()

    private val _products=MutableLiveData<ProductsModel>()
    val products:LiveData<ProductsModel>
        get()=_products

    fun getProducts(catId:String){
        _products.value=repository.getProducts(catId)
    }
}

это ошибка: enter image description here

Я не понимаю эту ошибку, как я могу ее исправить? почему он говорит мне, что тип не соответствует действительности?

1 Ответ

0 голосов
/ 14 октября 2019

Вы должны принять значение LiveData Пример:

products.value=repository.getProducts(catId).value

Но наиболее предпочтительным способом является использование Transformations

private val catId = MutableLiveData<String>()

 val products: LiveData<ProductsModel> = Transformations.switchMap(catId) { catId->
    if (catId == null) {
        AbsentLiveData.create<ProductsModel>()
    } else {
        repository.getProducts(catId)
    }
}
...