Return CoroutineScope 中伴随对象函数中的字符串
Return a String inside the companion object function inside the CoroutineScope
在 MainActivity 中有一个伴随对象函数,它使用函数外部的变量。在函数中,我想 return 数据作为 CoroutineScope
内的字符串。这是代码:-
class MainActivity : AppCompatActivity() {
private var data = “myName”
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val data = getMyOuterValue()
Toast.makeText(this@MainActivity, data, Toast.LENGTH_SHORT).show()
}
init {
instance = this
}
companion object {
private var instance: MainActivity? = null
fun getMyOuterValue() : String = CoroutineScope(Main).launch {
instance?.data.toString()
}.toString()
}
}
注意在函数“getMyOuterValue”中我想 return 字符串,但它 return 是 CoroutineScope
对象。请协助
fun getMyOuterValue() : String = CoroutineScope(Main).launch
在这里你试图强制函数 return 一个字符串,而它应该 return 一个协程作业
然后您使用 .toString()
强制执行此操作以避免类型不匹配。
无论此设置的目的如何,如果您想 return 来自协程内部的值;您可以改用 async
构建器;这需要使用挂起函数来利用 await()
方法。
你的函数应该是:
suspend fun getMyOuterValue() = CoroutineScope(Main).async {
return@async instance?.data
}.await()
作为挂起的乐趣,对它的调用必须来自协程:
CoroutineScope(Main).launch {
val data = getMyOuterValue()
Toast.makeText(this@MainActivity, data, Toast.LENGTH_SHORT).show()
}
问题是您没有正确返回它并且没有等待协程完成。试试这个
fun getMyOuterValue() = CoroutineScope(Dispatchers.IO).async {
return@async instance?.data.toString()
}
在oncreate()中
CoroutineScope(Dispatchers.IO).launch {
val data = getMyOuterValue()
data.await()
}
在 MainActivity 中有一个伴随对象函数,它使用函数外部的变量。在函数中,我想 return 数据作为 CoroutineScope
内的字符串。这是代码:-
class MainActivity : AppCompatActivity() {
private var data = “myName”
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val data = getMyOuterValue()
Toast.makeText(this@MainActivity, data, Toast.LENGTH_SHORT).show()
}
init {
instance = this
}
companion object {
private var instance: MainActivity? = null
fun getMyOuterValue() : String = CoroutineScope(Main).launch {
instance?.data.toString()
}.toString()
}
}
注意在函数“getMyOuterValue”中我想 return 字符串,但它 return 是 CoroutineScope
对象。请协助
fun getMyOuterValue() : String = CoroutineScope(Main).launch
在这里你试图强制函数 return 一个字符串,而它应该 return 一个协程作业
然后您使用 .toString()
强制执行此操作以避免类型不匹配。
无论此设置的目的如何,如果您想 return 来自协程内部的值;您可以改用 async
构建器;这需要使用挂起函数来利用 await()
方法。
你的函数应该是:
suspend fun getMyOuterValue() = CoroutineScope(Main).async {
return@async instance?.data
}.await()
作为挂起的乐趣,对它的调用必须来自协程:
CoroutineScope(Main).launch {
val data = getMyOuterValue()
Toast.makeText(this@MainActivity, data, Toast.LENGTH_SHORT).show()
}
问题是您没有正确返回它并且没有等待协程完成。试试这个
fun getMyOuterValue() = CoroutineScope(Dispatchers.IO).async {
return@async instance?.data.toString()
}
在oncreate()中
CoroutineScope(Dispatchers.IO).launch {
val data = getMyOuterValue()
data.await()
}