gpt4 book ai didi

android - 无法从CoroutineScope启动访问暂停Dao功能

转载 作者:行者123 更新时间:2023-12-02 13:29:45 27 4
gpt4 key购买 nike

我有一个Room数据库的简单Dao界面,在其中我具有挂起函数以从表中插入和获取数据。

在我的DBHelper类中,我尝试使用launch - CoroutineScope插入数据,但似乎不在启动内,并且启动内的功能未执行。

关于我可能做错了什么的任何建议,请

OfflineDataDao

@Dao
interface OfflineDataDao {

@Query("SELECT * FROM offlineDatax")
suspend fun getOfflineData(): List<OfflineDatax>

@Insert
suspend fun insertOfflineData(offlineData: OfflineDatax): Long
}

实体
@Entity
data class OfflineDatax (
@PrimaryKey val uid: Int,
@ColumnInfo(name = "requestJSON") val requestJSON: String?,
@ColumnInfo(name = "requestCode") val requestCode: String?
)

数据库助手
我访问dao暂停方法的类
class DBHelper @Inject constructor(
private val userDao: UserDao,
private val offlineDataDao: OfflineDataDao
) : CoroutineScope {

private var job: Job = Job()

override val coroutineContext: CoroutineContext
get() = Dispatchers.Main + job


fun accessDBFunction() {

var offlineDatax = OfflineDatax(1, "rjson", "rCode")
addOfflineData(offlineDatax)

getOfflineData()
}

fun addOfflineData(offlineDatax: OfflineDatax): Long {
var lng: Long = 0L
launch {
lng = offlineDataDao.insertOfflineData(offlineDatax) // IS NOT CALLED, DOES NOT GET INTO LAUNCH
}
return lng
}

fun getOfflineData (): List<OfflineDatax> {
var offlineData = emptyList<OfflineDatax>()
launch {
offlineData = offlineDataDao.getOfflineData(); // IS NOT CALLED, DOES NOT GET INTO LAUNCH
}
Timber.d("offlinedata " + offlineData.toString())
return offlineData
}
}

最佳答案

只需通过suspend修饰符使函数挂起并直接从它们返回,它们就会将自身挂起到Room库中定义的自己的调度程序中。

suspend fun addOfflineData(offlineDatax: OfflineDatax): Long =
offlineDataDao.insertOfflineData(offlineDatax)

suspend fun getOfflineData (): List<OfflineDatax> =
offlineDataDao.getOfflineData().also { Timber.d("offlinedata " + it.toString()) }

并从任何协程调用该函数。

关于android - 无法从CoroutineScope启动访问暂停Dao功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62128500/

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