房间数据库查询是异步的吗?如果是这样,由于缺乏更好的术语,像这样的异步/竞争条件安全吗?
fun insertThingAsync(thing: Thing) = async(Dispatchers.IO) {
try {
dao.deleteAllThings()
dao.insertThing(thing)
}
catch (e: Throwable) {
// Stuff
}
}
Run Code Online (Sandbox Code Playgroud)
换句话说,在这种情况下,是否有可能在完成之前dao
尝试插入,因此也有机会删除新插入的内容?thing
dao.deleteAllThings()
thing
如果是这样,你们都用什么方法来处理这样的事情,以确保在删除完成之前不会尝试插入?
roomDatabase.clearAllTables
由于此线程中的对话,我还想知道与 的相同用例。
我正在使用 GSON 序列化一些平台数据。当我@SerialName
在应用程序中使用不同的命名约定捕获平台数据时,它适用于其他类型,但不适用于Boolean
类型。举一个简单的例子,如果我有一个像这样的课程......
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Person (
@SerialName("first_name") val firstName: String? = null,
@SerialName("last_name") val lastName: String? = null,
val age: Int? = null
)
Run Code Online (Sandbox Code Playgroud)
...一切正常。序列化器在数据中查找,first_name
并正确设置.last_name
age
Person
但是,当我尝试添加Boolean
...
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class Person (
@SerialName("first_name") val firstName: String? = null,
@SerialName("last_name") val lastName: String? = null,
val age: Int? = null,
@SerialName("can_sing") val canSing: Boolean? = null
)
Run Code Online (Sandbox Code Playgroud)
...序列化器不会捕获和分配can_sing
。奇怪的是它适用于 a …