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

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

Mystus 2月前

45 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)
  • 我正在开发一个应用程序,需要将 json 文档的 zip 存档提取到文件夹中。我遇到的问题是有时存档包含嵌套的 zip 文件。我目前的 c...

    我正在开发一个应用程序,需要将 JSON 文档的 zip 存档提取到文件夹中。我遇到的问题是有时存档包含嵌套的 zip 文件。我当前的代码如下所示:

    fun File.unzipServiceFile(toPath: String): List<File>
        {
            val retFiles = mutableListOf<File>()
            ZipFile(this).use { zipFile ->
                zipFile.entries().asSequence().forEach { zipEntry ->
                    zipFile.getInputStream(zipEntry).use { input ->
                        //if there are nested zip files, we need to extract them
                        if (zipEntry.name.endsWith(".zip")) {
                            //we need to go deeper
                        }
                        else if (zipEntry.name.endsWith(".json") && !zipEntry.isDirectory && !zipEntry.name.startsWith(".") && !zipEntry.name.startsWith(
                                "_"
                            )
                        ) {
                            val file = File("$toPath/${zipEntry.name}")
                            FileUtils.writeByteArrayToFile(file, input.readBytes())
                            retFiles.add(file)
                        }
                    }
                }
            }
    
            return retFiles
        }
    

    我实际上并不想将嵌套的 zip 文件写入文件夹,因为这样我就必须将它们从目录中清除。我只想提取内容,或者如果还有其他嵌套层,则继续递归。你知道我该怎么做吗?

返回
作者最近主题: