8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

LiveData 未在第二次 API 调用时更新其值

Mystus 2月前

38 0

我正在使用 retrofit 和 ViewModel 概念通过 api 调用获取货币汇率。启动应用程序时,我能够从服务器获取最新数据,但是当我尝试更新实时

我正在使用 retrofit 和 ViewModel 概念通过 api 调用获取货币汇率。在启动应用程序时,我能够从服务器获取最新数据,但是当我尝试通过单击按钮来更新实时数据时,实时数据值不会更新,我得到的是相同的旧数据。所以有人可以帮我如何在按钮单击事件上更新实时数据吗?

ViewModel 类*****

类 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()
    }
}

}

方法(在 MainActivity 中)获取和更新货币列表 *****

私人乐趣 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)

    })

}
帖子版权声明 1、本帖标题:LiveData 未在第二次 API 调用时更新其值
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Mystus在本站《kotlin》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我尝试使用“aux”对象的不同值多次运行以下代码。time <- seq(0, 30, 1)stock <- c(sK=0, sF=1) aux <- c(aH=0.4, aRel=0.5, aRes=0.5, aS=0.8)...

    我尝试使用“aux”对象的不同值多次运行以下代码。

    time <- seq(0, 30, 1)
    stock <- c(sK=0, sF=1) 
    aux <- c(aH=0.4, aRel=0.5, aRes=0.5, aS=0.8)
    
    model <- function(time, stock, aux) {
      with(as.list(c(stock, aux)), { 
        aA <- 1-sK/1  
        fH <- 1*aH*aA
        sF <- fH*aRel*0.2*0.8
        fS <- sF*aRes
        sK <- fS*aS
        net_f <- fH - fS
        net_k <- fS
        return(list(c(net_f, net_k), 
                    fH=fH, fS=fS, aA=aA, net_f=net_f, net_k=net_k))
      })
    }
    
    library(deSolve)
    out <- data.frame(ode(times=time, y=stock, parms=aux, func=model, method='euler'))
    out
    

    我的问题是:

    1. 我已经创建了一个用于网格搜索的数据框
    d <- crossing(aH=seq(0, 1, 0.1), aRel=seq(0, 1, 0.1), aRes=seq(0, 1, 0.1),
                  aS=seq(0, 1, 0.1))
    

    我如何将此网格搜索与上述模型联系起来,并获得“aux”的最佳组合?我意识到网上有关于这个问题的例子,但我的问题是,“aux”是进一步建模代码的值

    out <- data.frame(ode(times=time, y=stock, parms=aux, func=model, method='euler'))
    
    1. 对于行
    sF <- fH*aRel*0.2*0.8
    

    我需要将值 0.2 和 0.8 更改为其他值,例如,0.2 也可以更改为 0.5 或 0.8,而 0.8 也可以更改为 0.5 和 0.2。因此对于这部分,有 3*3=9 种情况。在网格搜索中执行此操作的正确方法是什么?

    希望我已经清楚描述我的问题。请给我一些建议。

返回
作者最近主题: