kotlin .KotlinNullPointerException при доступе через модель представления - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть модель просмотра с MutableLiveData, которая выглядит следующим образом:

private val _num = MutableLiveData<Float>()

val num: LiveData<Float>
    get() = _num 

val sum: Int= sumMap.map { it.value }.sumBy { it.num}

_num.value = sum.toFloat()

Я могу правильно получить значение, но когда я пытался получить доступ через viewmodel obje c, я получаю

kotlin .KotlinNullPointerException

Почему я получаю эту ошибку? мой код в моем фрагменте выглядит следующим образом:

   val dVal: Float = viewModel.num.value!!
            Log.i("MainScreenFragment", "numVal $dVal")

Кроме того, если я удаляю !! assertion, я получаю required Float but found Float?, Почему это? Я никогда не объявлял свою переменную как обнуляемую

РЕДАКТИРОВАТЬ:

Это вся функция, эта функция вызывается внутри init block

private fun getPlacesCountries() {
    coroutineScope.launch {
        var getPlacesDeffers = PlaceApi.retrofitService.getPropeties()
        try {
            var result = getPlacesDeffers.await()
            if (result.isNotEmpty()) {
                val sumMap: Map<String, Data> = result.mapValues { (country,data) -> data.last() }

                val sum: Int= sumMap.map { it.value }.sumBy { it.num }

                _num.value = sum.toFloat()
                }
            }

        } catch (e: Exception) {
            _response.value = "Failure: ${e.message}"
        }
    }
}

1 Ответ

0 голосов
/ 12 апреля 2020

В вашей деятельности / фрагменте вам необходимо соблюдать LiveData:

viewModel.num.observe(this, Observer {
   it?.let { chart.setData(it) } // set values if it is not null
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...