【发布时间】:2017-11-15 07:24:43
【问题描述】:
基于我之前的问题 (Android Persistence room: "Cannot figure out how to read this field from a cursor"),感谢反馈,我在 Kolin 中实现了相同的示例(请参见下面的代码)。我必须进行一些小的更改,例如现在传递给查询的参数,这些参数必须作为“p0”、“p1”等传递。 现在在 Kotlin 中,我收到以下与 UserWithPets 类相关的错误:
错误:无法确定如何从游标中读取此字段。 e: 私有 java.util.List 宠物;
@Dao
interface UserDAO {
@get:Query("SELECT * FROM user")
val all: LiveData<List<User>>
@Insert
fun insertUser(user: User) //single one
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertUsers(vararg users: User)
@Query("SELECT * FROM User")
fun loadUsersWithPets(): LiveData<List<UserWithPets>>
}
@Entity
class Pet( var name: String?, var ownerId: Int,@PrimaryKey(autoGenerate = true)var id:Int)
@Dao
interface PetDAO {
@Query("SELECT * FROM pet")
val all: List<Pet>
@Query("SELECT * FROM pet WHERE id IN (:p0)")
fun loadAllByIds(petIds: IntArray): List<Pet>
@Insert
fun insert(pet: Pet)
@Insert
fun insertAll(vararg pets: Pet)
@Delete
fun delete(user: Pet)
}
class UserWithPets {
@Embedded
var user: User? = null
@Relation(parentColumn = "id", entityColumn = "ownerId", entity = Pet::class)
var pets: List<Pet>? = null
}
看来,如果我用 Java 编写 UserWithPets 类,它可以正常工作,但用 Kotlin 编写时会失败。有什么想法有什么问题吗?这是注释处理问题吗?
【问题讨论】:
-
试试
List<@JvmSuppressWildcards Pet>。文档:kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/… -
我面临同样的问题。它不适用于 Kotlin 类
-
我创建了这个问题issuetracker.google.com/issues/62778467 因为我无法解决它。
-
太棒了,我们的短期解决方案是用 Java 编写实体,其余部分用 Kotlin 编写,这仍然有效。让我们希望谷歌尽快修复它
-
是的@AndreaSoro
标签: android kotlin android-room android-architecture-components