当前位置: 首页 > 知识库问答 >
问题:

Android room数据库-不确定如何将光标转换为此方法的返回类型

傅博瀚
2023-03-14

我正在尝试将此对象保存在Room数据库中,我读到了Typconverters用于将复杂对象转换为一个可以存储在数据库中的文件。我收到这个错误:错误:不确定如何将光标转换为此方法的返回类型(androidx.lifecycle.LiveData

我的问题类别:

@Entity

    data class Question(@PrimaryKey var questionId: String = "",
                        val uid: String,
                        val name: String,
                        val photo: String,
                        val question: String,
                        val points: Int,
                        @ServerTimestamp val timestamp: Date? = null,
                        val options: ArrayList<Option>){
        constructor(): this("", "", "", "", "", 0, null, ArrayList())
    }

    data class Option(val optionText: String,
                      val correct: Boolean,
                      var votes: Int = 0,
                      var usersVoted: ArrayList<UserVoted> = ArrayList()){
        constructor(): this("", false /*,0, ArrayList()*/)
    }

    data class UserVoted(val name: String,
                         val photo: String){
        constructor(): this("", "")
    }

我的dao类:

@Dao
interface QuestionDao {
    @Insert(onConflict = REPLACE)
    fun insertQuestions(question: ArrayList<Question>)

    @Query("SELECT * FROM question WHERE uid = :userId")
    fun queryQuestions(userId: String): LiveData<ArrayList<Question>>
}

我的数据库类:

@Database(entities = [Question::class], version = 1)
@TypeConverters(Converter::class)
abstract class AppDatabase : RoomDatabase(){
    abstract fun questionDao(): QuestionDao

}

我的转换器类别:

class Converter {

    @TypeConverter
    fun fromTimestampToDate(value: Long?): Date? {
        return value?.let { Date(it) }
    }

    @TypeConverter
    fun fromDateToTimestamp(date: Date?): Long? {
        return date?.time?.toLong()
    }

    @TypeConverter
    fun fromStringToArrayList(value: String): ArrayList<Option> {
        Log.i("alengenije", "fromStringToArrayList string = $value")
        val listType = object:TypeToken<ArrayList<Option>>() {}.type
        return Gson().fromJson(value, listType)
    }

    @TypeConverter
    fun fromArrayLisrToString(list: ArrayList<Option>): String {
        val gson = Gson()
        return gson.toJson(list)
    }

}

共有2个答案

马国源
2023-03-14

您遇到的问题是由使用LiveData引起的。从Android API 28开始,支持库已移动到androidx,这意味着您必须将所有内容移动到androidx。您的问题在于构建。gradle文件。您可能有andoidx生命周期,但房间库是旧的1.1.1房间库。您应该更新所有支持库以使用androidx,如下所示:

def lifecycle_version = "2.0.0"

implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.0'

// Add RecyclerView dependency; must match SDK version
implementation 'androidx.recyclerview:recyclerview:1.0.0'

// Add FAB dependency
implementation 'com.google.android.material:material:1.0.0-rc01'

def room_version = "2.1.0-alpha07"

implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"

implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
甘兴学
2023-03-14

数组列表更改为列表。

这对我有用。

 类似资料:
  • 使用我得到了这个错误,我想找出是哪种方法导致的。 我有多个s,总共大约有60个方法,这个错误只是在添加一个方法(复制 我可以发布整个类的s,但是我需要一种方法来知道哪个方法失败了。我尝试了,和,但是这些都没有显示任何有价值的信息。 我添加的方法是一个,带有返回类型,如在留档中建议的那样 UPDATE或DELETE查询可以返回空或int。如果是int,则该值是受此查询影响的行数。 编辑:我想补充一点

  • 我正在使用房间来建立简单的笔记应用程序。下面是我的note实体类: 我希望它会返回一个注释列表。但是我的应用程序崩溃了,这个错误消息显示“不确定如何将光标转换为该方法的返回类型”。

  • 我在这里看到了很多问题,但这些答案都没有解决我的问题。这是我的DAO: 我正试图得到一个包含在该类别中的食谱列表。我得到一个编译时错误,它说: C: 。。。\app\build\tmp\kapt3\stubs\debug\com\mitch\rcp\RecipeDAO。java:18:错误:不确定如何将游标转换为此方法的返回类型(void)。 但我的返回类型不是void?我不明白。

  • 我正在使用kotlin和room库开发一个android应用程序。当我试图获取插入项的id时,我得到了以下错误 不确定如何处理insert方法的返回类型。公共抽象java。lang.Object InsertReceive(@org.jetbrains.annotations.NotNull() 我尝试过其他类似的解决方案,但它不起作用 这是我的密码 收据kt 接收道。kt ReceiptRepo

  • 问题内容: 我正在尝试检索JSON对象(我已验证的文件格式正确)中的数据,并将数据输出到firebug控制台中。我使用JSONLint(http://jsonlint.com/)验证了JSON,并且知道数据没有在JSON对象中返回,因为当我记录它时,它是以文本而不是对象的形式记录的。当我查看ajax帖子时,有一个JSON选项卡,其中显示了该对象,出于某种原因,我只是无法检索它。 我的ajax电话是

  • 我试图返回SQLite数据库的“category”列中不同值的名称。光标似乎没有返回任何结果。 我正在用一个预先存在的鸟类数据库构建一个Android应用程序。其目的是允许用户通过应用程序探索数据库。我遇到的问题是试图返回数据库中存在的不同种类的鸟类物种。数据库似乎正在成功打开-没有引发SQLite异常-但是在使用查询后,'.MoveTonext'方法似乎没有返回任何数据。 请帮忙,不胜感激。