在 Kotlin 中访问 CoroutinScope 中更新的变量

问题描述 投票:0回答:1

我已经全局声明了变量并更新了 coroutinScope 内的值。当我调用 coroutinScope 之外的值时,它的值不会更新。我如何在外部访问 coroutinScop 内部更新的值。这是例子。当我通过 HTTP 客户端 Fuel 从端点获取一些数据后,我需要更新变量 v1 和 v2。

class MainActivity : AppCompatActivity() , AdapterView.OnItemSelectedListener {

var v1 = 0
var v2 = 0

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val datalink1 = "abcdefj.json"

    CoroutineScope(Dispatchers.IO).launch() {

        val abcd = Fuel.get(datalink1t).awaitString()

        if(abcd.equals("c")){
            v1++
        }

        else if(abcd.equals("d")){
            v2++
        }

我想全局访问在 coroutinscope 内更新的 v1 和 v2,以便我可以在其他活动或适配器类中使用它们。但我只得到初始值 0。我如何在全局范围内更新它。我是 kotlin 或协程的新手,请帮忙。

或者查看下面附加的代码简单示例,其中包含 mainActivity kotlin 的 onCreate 方法内的 coroutinScope 块。我想在 coroutinscope 内全局更新 k 的值。我想实现在 coroutinscope 中更新 k 的值,但在外部访问此更新。但我得到了初始值。任何人都可以帮助如何获得这个简单的问题, 请。我想要在 coroutinscope 中更新并从 coroutinscope 访问后得到 k 4 的值。谢谢

kotlin asynchronous kotlin-coroutines
1个回答
1
投票

协程在块内异步运行您的代码。您可以从日志中看到,协程外部的日志记录在协程内部的日志记录之前被调用。这就是为什么您只能看到初始值。

如果你想使用更新后的值,你只需要稍微延迟一下即可获取它。届时它也将在全球范围内设置。

© www.soinside.com 2019 - 2024. All rights reserved.