gpt4 book ai didi

android - 来自数据类 .copy() 的新对象

转载 作者:行者123 更新时间:2023-11-29 16:33:47 27 4
gpt4 key购买 nike

我在 Kotlin 中有一个数据类:

data class myDataClass(
var a: ArrayList<Long> = ArrayList(),
var b: ArrayList<Long> = ArrayList(),
var c: ArrayList<Long> = ArrayList(),
...
)

private val myDataClassVal: myDataClass = myDataClass()

我使用此数据类来存储通过 BLE 获取的数据,当每个 ArrayList 达到一定长度时,这些数据将 POST 到 REST API。在此 POST 之后,myDataClass 中的数据被 .clear() 编辑并且该过程将重复。

应用程序的 BLE 部分对时间敏感,每个 POST 大约需要 1 秒;我的解决方案是异步运行我的 POST 函数;而不是在与 BLE 代码相同的线程上运行。我通过以下方式执行此操作:

GlobalScope.async { 
uploadData(myDataClassVal)
}

myDataClassVal.a.clear()
myDataClassVal.b.clear()
myDataClassVal.c.clear()

不幸的是,在 async 函数调用之后我立即清除了 myDataClass 中的数据,数据实际上在序列化和发布之前就从数据类中清除了。

为了解决这个问题,我在上传之前创建了一个 myDataClass 的副本,并将其传递给 async 上传函数。 duplicate 是使用 .copy() 函数创建的,如 here 所述:

uploadBuffer = myDataClassVal.copy()
GlobalScope.async {
uploadData(uploadBuffer)
}
myDataClassVal.a.clear()
....

但是,uploadBuffer 仍然是空的。如果我以相同的方式创建 myDataClass 的副本并在同一线程上发布:

uploadBuffer = myDataClassVal.copy()
uploadData(uploadBuffer)
myDataClassVal.a.clear()
....

然后它就可以正常工作了。

所以,我认为我的问题是 uploadBuffer 只是一个指向 myDataClass 的指针。如果是这种情况,我如何创建一个与 myDataClass 重复的新对象以在我的 async POST 中使用?

谢谢,亚当

最佳答案

为什么不为每次新运行创建一个新实例。您不需要 copy 功能,只需在启动后创建一个新实例即可:

GlobalScope.launch {
uploadData(uploadBuffer)
}
uploadBuffer = new myDataClassVal()

顺便说一句:您应该以大写字母开始您的类(class),例如MyDataClassVal。请参阅命名约定:https://kotlinlang.org/docs/reference/coding-conventions.html#naming-rulesan

您应该使用launch 而不是async,因为您不需要结果,参见Kotlin Async vs Launch

关于android - 来自数据类 .copy() 的新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53192110/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com