如何在Kotlin中修改超出其范围的变量?

RonRon分数

我了解在Kotlin中没有诸如“非局部变量”或“全局变量”之类的东西,我正在寻找一种使用以下功能在Kotlin中的另一个“ Scope”中修改变量的方法:

class Listres(){
var listsize = 0
fun gatherlistresult(){
    

    var listallinfo = FirebaseStorage.getInstance()
                                     .getReference()
                                     .child("MainTimeline/")
                                     .listAll()
    listallinfo.addOnSuccessListener {
        listResult -> listsize += listResult.items.size
    }
                
    
}
}

listsize的值始终为0(从.addOnSuccessListener作用域内部记录结果将返回8),因此显然listsize变量没有被修改。我在其他站点上看到了许多关于此主题的不同文章,但没有一个适合我的用例。

我只想listsize.addOnSuccessListener回调内部进行修改

荷马人

您正在寻找的是一种将一些异步处理桥接到同步上下文中的方法。如果可能的话,在我的代码库中,最好坚持一种模型(同步或异步)(在我看来)。

话虽如此,有时这些情况是我们无法控制的。我在类似情况下使用的一种方法涉及引入aBlockingQueue作为数据管道,以将数据从异步上下文传输到同步上下文。在您的情况下,可能看起来像这样:

class Demo {
  var listSize = 0

  fun registerListResult() {
    val listAll = FirebaseStorage.getInstance()
        .getReference()
        .child("MainTimeline/")
        .listAll()

    val dataQueue = ArrayBlockingQueue<Int>(1)

    listAll.addOnSuccessListener { dataQueue.put(it.items.size) }

    listSize = dataQueue.take()
  }
}

关键点是:

  • Queue接口的阻塞变体将用于将数据从异步上下文(侦听器)管道传输到同步上下文(调用代码)
  • 数据put()OnSuccessListener
  • 调用代码调用队列的take()方法,这将导致该线程阻塞,直到有一个值可用为止

如果那对您不起作用,希望它至少会激发一些新想法!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用超出其异步功能范围的变量

如何在 helm 模板中访问超出当前范围控制的变量

如何在Promise.then中访问超出范围的变量(类似于闭包)

如何在指令中修改范围的值

如何在MATCH()中修改范围的内容?

如何在控制器中修改指令隔离范围变量,同时又保持隔离状态?

如何检测ScrollViewer超出其可用范围

如何获取对超出范围的变量在php中的访问权限?

如果局部变量被引用超出其范围,如何强制 Python 报告错误?

即使值超出其范围,整数变量也如何显示正确的值?

如何为超出其范围的刚性类型变量重现 GHC 的类型错误?

如何在Kotlin中修改val成员

如何在Kotlin中访问变量而不调用其setter和getter

如何在R中修改字符变量

如何在python中修复“列表索引超出范围”?

如何在Swift中捕获“索引超出范围”?

如何在python中修复索引超出范围

如何在 Python 中修复索引超出范围?

如何从网格中删除数值超出其在 R 中的特定因子范围的点?

照明元件能否跟踪超出其范围的变量

如何在函数中引用模块变量而不在Elixir 1.0.3中引用其模块?在其父范围内?

如何解决超出范围的变量?

如何访问超出类范围的变量

如何访问超出类范围的变量?

如何访问超出声明范围的变量?

Kotlin:如何在 MainActivity 中修改 OnMapReadyCallback(在 MapsFragment 中声明)

如何检查UIView是否超出其超级视图范围

我如何安全地返回超出其范围的选项?

如何在Kotlin中获取变量的名称?