Android 房间数据库 - 不确定如何将 Cursor 转换为此方法的返回类型

标签 android kotlin gson android-room

我正在尝试将此对象保存在 Room 数据库中,我阅读了有关 Typeconverters 的信息,用于将复杂对象转换为可以存储在数据库中的一个字段。我收到此错误:
错误:不确定如何将 Cursor 转换为此方法的返回类型 (androidx.lifecycle.LiveData>).----
公共(public)抽象 androidx.lifecycle.LiveData> queryQuestions(@org.jetbrains.annotations.NotNull()

我的代码基于我发现的用于转换房间对象的类似问题的解决方案,但这对我不起作用。

我的问题类:

@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
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)
    }

}

最佳答案

更改ArrayListList .

这个对我有用。

关于Android 房间数据库 - 不确定如何将 Cursor 转换为此方法的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55270085/

相关文章:

javascript - Kotlin 相当于 JavaScript 中的 "export default"

dart - 什么是类似 java 中的 Gson 的 flutter dart 中可用的等效库

java - 如何合理处理来自3rd-party API的RuntimeExceptionS?

Espresso 和不同的 BuildVariants 未找到 Android 测试支持库

Android 应用更新返回缓存的应用更新信息

存储带引号的字符串时 Android SharedPreferences 崩溃

java - Android MotionLayout 在真实设备上不显示动画

java - 预期 BEGIN_ARRAY 但在第 1 行第 1 列路径 $ GSON 处为 STRING

Android 屏幕停止读取输入

android - 实现加速度计(Andengine)时出现问题