Я должен делать запрос GET каждую секунду, и я должен обновлять пользовательский интерфейс с входящими данными fre sh.
Мне удалось заставить работать повторяющийся сетевой запрос, используя Timer
. Я вижу okhttp
журналы, показывающие повторяющиеся ответы с данными fre sh каждую секунду.
Однако пользовательский интерфейс не обновляется с новыми данными. Он показывает только данные из первого запроса. Я попытался реализовать MVVM, вызывающий сеть и возвращающий LiveData
, который будет наблюдаться во фрагменте.
Редактировать : я только что заметил, что новые данные добавляются в список как recyclerview
теперь растет и растет каждую секунду с новыми предметами.
ViewModel
class RatesViewModel : ViewModel() {
private val _rates = MutableLiveData<RatesResponse>()
val rates : LiveData<RatesResponse>
get() = _rates
fun init(base: String) {
timer("NetworkRequest",false, 0, 1000) {
viewModelScope.launch {
_rates.postValue(RatesRepository().getRates(base))
}
}
}
}
Фрагмент
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProvider(this).get(RatesViewModel::class.java)
viewModel.init("EUR")
val ratesLiveData = viewModel.rates
ratesLiveData.observe(viewLifecycleOwner, Observer { response ->
addElements(response.rates)
if (ratesAdapter == null) {
setUpRecyclerView()
} else {
ratesAdapter!!.notifyDataSetChanged()
}
})
setUpRecyclerView()
}
Добавить функцию элемента
private fun addElements(allRates: Rates) {
ratesList.add(Currency(
"EUR", "Euro", R.drawable.eur, 1.00))
ratesList.add(Currency(
"AUD", "Australian Dollar", R.drawable.aud, allRates.AUD))
ratesList.add(Currency(
"BGN", "Bulgarian Lev", R.drawable.bgn, allRates.BGN))
ratesList.add(Currency(
"BRL", "Brazilian Real", R.drawable.brl, allRates.BRL))
ratesList.add(Currency(
"CAD", "Canadian Dollar", R.drawable.cad, allRates.CAD))
ratesList.add(Currency(
"CHF", "Swiss franc", R.drawable.chf, allRates.CHF))
ratesList.add(Currency(
"CNY", "Chinese Yuan", R.drawable.cny, allRates.CNY))
ratesList.add(Currency(
"CZK", "Czech Koruna", R.drawable.czk, allRates.CZK))
ratesList.add(Currency(
"DKK", "Danish Krone", R.drawable.dkk, allRates.DKK))
ratesList.add(Currency(
"GBP", "British Pound", R.drawable.gbp, allRates.GBP))
ratesList.add(Currency(
"HKD", "Hong Kong Dollar", R.drawable.hkd, allRates.HKD))
ratesList.add(Currency(
"HRK", "Croatian Kuna", R.drawable.hrk, allRates.HRK))
ratesList.add(Currency(
"HUF", "Hungarian Forint", R.drawable.huf, allRates.HUF))
ratesList.add(Currency(
"IDR", "Indonesian Rupiah", R.drawable.idr, allRates.IDR))
ratesList.add(Currency(
"ILS", "Israeli Shekel", R.drawable.ils, allRates.ILS))
ratesList.add(Currency(
"INR", "Indian Rupee", R.drawable.eur, allRates.INR))
ratesList.add(Currency(
"ISK", "Icelandic Króna", R.drawable.isk, allRates.ISK))
ratesList.add(Currency(
"JPY", "Japanese Yen", R.drawable.jpy, allRates.JPY))
ratesList.add(Currency(
"KRW", "South Korean Won", R.drawable.krw, allRates.KRW))
ratesList.add(Currency(
"MXN", "Mexican Peso", R.drawable.mxn, allRates.MXN))
ratesList.add(Currency(
"MYR", "Malaysian Ringgit", R.drawable.myr, allRates.MYR))
ratesList.add(Currency(
"NOK", "Norwegian Krone", R.drawable.nok, allRates.NOK))
ratesList.add(Currency(
"NZD", "Bulgarian Lev", R.drawable.bgn, allRates.BGN))
ratesList.add(Currency(
"PHP", "Philippine Peso", R.drawable.php, allRates.PHP))
ratesList.add(Currency(
"PLN", "Polish Złoty", R.drawable.pln, allRates.PLN))
ratesList.add(Currency(
"RON", "Romanian Leu", R.drawable.ron, allRates.RON))
ratesList.add(Currency(
"RUB", "Russian Rouble", R.drawable.rub, allRates.RUB))
ratesList.add(Currency(
"SEK", "Swedish krona", R.drawable.sek, allRates.SEK))
ratesList.add(Currency(
"SGD", "Singapore Dollar", R.drawable.sgd, allRates.SGD))
ratesList.add(Currency(
"THB", "Thai Baht", R.drawable.thb, allRates.THB))
ratesList.add(Currency(
"USD", "United States Dollar", R.drawable.usd, allRates.USD))
ratesList.add(Currency(
"ZAR", "South African Rand", R.drawable.zar, allRates.ZAR))
}