我正在使用 retrofit 和 ViewModel 概念通过 api 调用获取货币汇率。启动应用程序时,我能够从服务器获取最新数据,但是当我尝试更新实时
我正在使用 retrofit 和 ViewModel 概念通过 api 调用获取货币汇率。在启动应用程序时,我能够从服务器获取最新数据,但是当我尝试通过单击按钮来更新实时数据时,实时数据值不会更新,我得到的是相同的旧数据。所以有人可以帮我如何在按钮单击事件上更新实时数据吗?
类 MainViewModel(私有 val 存储库:CurrencyRepository):ViewModel(){
init {
viewModelScope.launch() {
repository.getCurrencyExchangeList()
}
}
val quotes: LiveData<CurrencyData>
get() = repository.currencyLiveData
}
类 CurrencyRepository(private val currencyService:CurrencyInterface){
val currencyLiveData = MutableLiveData<CurrencyData>()
suspend fun getCurrencyExchangeList() {
val result = currencyService.getAllCurrencyData()
if (result.body() != null) {
//currencyLiveData.postValue(result.body())
currencyLiveData.value = result.body()
}
}
}
私人乐趣 fetchCurrencyRates() {
val currencyService = RetrofitHelper.getInstance().create(CurrencyInterface::class.java)
val repository = CurrencyRepository(currencyService)
val mainViewModel =
ViewModelProvider(this, MainViewModelFactory(repository))[MainViewModel::class.java]
mainViewModel.quotes.observe(this, Observer {
Log.d("AllCurrencyList", it.updated)
})
}
给定一个房间数据库和一个基于 DateTime 的参数的请求:@Transaction@Query(\'SELECT * FROM itemModel WHERE datetime(datetime(`end`), 'localtime') > datetime(:minDate, 'localt...
给定一个房间数据库和一个基于 DateTime 参数的请求:
@Transaction
@Query("SELECT * FROM itemModel WHERE datetime(datetime(`end`), 'localtime') > datetime(:minDate, 'localtime') ORDER BY `end` ASC")
fun getFlow(
minDate: LocalDateTime,
): Flow<List<ItemModel>>
=> 根据参数 minDate
,从请求返回的数据应该随着时间而改变(即使数据库没有数据变化)
如何处理流程更新?因为:
我像这样初始化我的流程:
var items: StateFlow<List<ItemModel>>
fun initItemsFlow(context: Context) {
items = getAllRecords(context).stateIn(
scope = coroutineScope,
started = SharingStarted.WhileSubscribed(5_000),
initialValue = emptyList(),
)
}
我是否应该手动 initItemsFlow
再次调用(=从头开始重新设置整个流程)或者是否有更好的流程/房间机制来处理这个问题?
谢谢