Android 选择单列值作为livedata

Android 选择单列值作为livedata,android,kotlin,android-room,android-livedata,Android,Kotlin,Android Room,Android Livedata,正如标题所示,我试图从数据库中选择一列作为livedata。但是我得到了下面的错误信息 错误:不确定如何将游标转换为此方法的返回类型(androidx.lifecycle.LiveData) 我正在跟踪手机的位置,并将位置对象插入名为LocationEntity的表中 我的实体如下所示 data class LocationEntity( ... val speed: Float, ... @PrimaryKey(autoGenerate = true) val id: Long

正如标题所示,我试图从数据库中选择一列作为livedata。但是我得到了下面的错误信息

错误:不确定如何将游标转换为此方法的返回类型(androidx.lifecycle.LiveData)

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

我的实体如下所示

data class LocationEntity(
...
    val speed: Float,
...
    @PrimaryKey(autoGenerate = true) val id: Long = 0
)
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>
}
我的刀看起来如下

data class LocationEntity(
...
    val speed: Float,
...
    @PrimaryKey(autoGenerate = true) val id: Long = 0
)
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>
}
private const val精度\u阈值=50
private const val speedSql=“”
选择速度
来自LocationEntity
其中runId=:runId和精度<$accurity\u阈值
按日期时间订购
描述限制1
"""
@刀
接口位置DAO{
...
@查询(speedSql)
暂停乐趣速度(runId:Long):LiveData
}

有关于我做错了什么的线索吗?

挂起和LiveData不能一起工作。下面的方法很有效

@Dao
interface LocationDao {
...
    @Query(speedSql)
    fun speed(runId: Long): LiveData<Float>
}
@Dao
接口位置DAO{
...
@查询(speedSql)
有趣的速度(runId:Long):LiveData
}

事实上,我认为LiveData是开箱即用的,在返回LiveData时没有理由使用协同程序

使用LiveData时,它已经在后台线程上处理它。如果不使用LiveData,那么在这种情况下,您可以使用协程(可能最终会使用协程通道)或RxJava等

通过在中使用livedata,您可能会发现一些有关插入数据的信息

最有趣的部分是下面的代码

@Dao
接口WordDao{
@查询(“按单词ASC顺序从单词表中选择*)
趣味getAllWords():LiveData
@插入
暂停乐趣插入(word:word)
@查询(“从word_表中删除”)
全数
}
类WordRepository(私有val wordDao:wordDao){
val-allWords:LiveData=wordDao.getAllWords()
@工作线程
暂停乐趣插入(word:word){
wordDao.insert(word)
}
}

@EpicPandaForce-感谢您的参与,但结果是suspend和LiveData噢,是的,我应该注意到这一点。