【问题标题】:Room Persistence @Relation working in Java but not in KotlinRoom Persistence @Relation 在 Java 中工作,但在 Kotlin 中不工作
【发布时间】: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 编写时会失败。有什么想法有什么问题吗?这是注释处理问题吗?

【问题讨论】:

标签: android kotlin android-room android-architecture-components


【解决方案1】:

尝试将房间更新为 1.0.0-alpha8 并添加 List。

【讨论】:

    【解决方案2】:

    尝试更改您的查询 @Query("SELECT * FROM pet WHERE id IN (:p0)")

    @Query("SELECT * FROM pet WHERE id IN (:petIds)")

    kotlin 和 Room lib 之间存在问题,Kotlin 没有正确保留参数的实际参数名称,因此 (:p0)/(:arg0) 解决了这个问题,现在解决了。

    希望能解决问题

    【讨论】:

      猜你喜欢
      • 2017-05-19
      • 2017-10-23
      • 2011-08-17
      • 1970-01-01
      • 2015-11-06
      • 2021-01-21
      • 2017-10-19
      • 2019-08-08
      • 1970-01-01
      相关资源
      最近更新 更多