不确定如何将 Cursor 转换为此方法的返回类型

Posted

技术标签:

【中文标题】不确定如何将 Cursor 转换为此方法的返回类型【英文标题】:Not sure how to convert a Cursor to this method's return type 【发布时间】:2019-04-23 06:23:33 【问题描述】:

我在这里很困惑。所以也许有人可以为我提供一些启示。我有一个看似简单的模式(下面的完整代码),但我收到编译器错误提示

错误:不确定如何将光标转换为该方法的返回值 输入。

有什么问题?我在room_version = "2.1.0-alpha02"

@Entity(tableName = "big_dog")
class BigDog(val big: Boolean, @PrimaryKey val id:Int=1)

@Dao
interface BigDogDao 

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(dog: BigDog)

    @Query("SELECT * FROM big_dog LIMIT 1")
    fun getBigDog(): LiveData<BigDog>


【问题讨论】:

我已经看过这里 (***.com/questions/46445964/…) 并且我已经尝试返回 LiveData&lt;List&lt;BigDog&gt;&gt;。我仍然遇到同样的错误。 我也面临同样的问题。你找到解决方案了吗? 【参考方案1】:

部署时检查日志以查看除此错误之外是否有任何通知。如果有通过并修复它们。如果您的房间代码有问题,则可能会出现此错误。

对于我的具体问题,我不小心将重复变量添加到我的一个实体中。

public int routeId;
/* other code */
public int routeid; 

这导致在构建日志中弹出此警告。

Room 无法创建 SQLite 连接来验证查询。查询验证将被禁用。错误:[SQLITE_ERROR] SQL 错误或缺少数据库(重复的列名:routeId)

我完成并修复了所有问题,因此没有警告,并且重新启用了查询验证,但我不再得到

错误:不确定如何将 Cursor 转换为此方法的返回类型。

【讨论】:

这是一个有价值的答案。谢谢。【参考方案2】:

检查您的应用 gradle 文件。尽量不要在项目中混合 Pre-androidX 和 AndroidX 组件依赖项。注意依赖项命名空间组。他们应该有一个相似的开头。在我的例子中是"android.arch.____:X.X.X"

dependencies
   ...

   def lifecycle_version = "1.1.1"
   def room_version = "1.1.1"

   // Lifecycle components
   implementation "android.arch.lifecycle:extensions:$lifecycle_version"
   annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version"

   // Room components
   implementation "android.arch.persistence.room:runtime:$room_version"
   annotationProcessor "android.arch.persistence.room:compiler:$room_version"

【讨论】:

以上是关于不确定如何将 Cursor 转换为此方法的返回类型的主要内容,如果未能解决你的问题,请参考以下文章

Room:不确定如何将 Cursor 转换为此方法的返回类型

Paging3:在 Room DAO 中使用 PagingSource 作为返回类型时,“不确定如何将 Cursor 转换为此方法的返回类型”

协程流程:不确定如何将游标转换为此方法的返回类型

如何在 ROOM android 中修复“不确定如何将光标转换为此方法的返回类型”

此方法的光标

Android Room 不确定如何将光标转换为方法的返回类型问题