首页 > 解决方案 > 选择单列值作为 livedata

问题描述

正如标题所示,我正在尝试从我的数据库中选择一个列作为 livedata。但我收到以下错误消息。

error: Not sure how to convert a Cursor to this method's return type (androidx.lifecycle.LiveData<java.lang.Float>)

我正在跟踪手机位置并将位置对象插入到名为 LocationEntity 的表中。

我的实体如下所示

data class LocationEntity(
...
    val speed: Float,
...
    @PrimaryKey(autoGenerate = true) val id: Long = 0
)

我的 DAO 如下所示

private const val ACCURACY_THRESHOLD = 50
private const val speedSql = """
    SELECT speed
    FROM LocationEntity
    WHERE runId = :runId AND accuracy < $ACCURACY_THRESHOLD
    ORDER BY dateTime
    DESC LIMIT 1
"""

@Dao
interface LocationDao {
...
    @Query(speedSql)
    suspend fun speed(runId: Long): LiveData<Float>
}

关于我做错了什么的任何线索?

标签: androidkotlinandroid-roomandroid-livedata

解决方案


暂停和 LiveData 不能一起工作。下面的作品。

@Dao
interface LocationDao {
...
    @Query(speedSql)
    fun speed(runId: Long): LiveData<Float>
}

推荐阅读