Я пытаюсь сохранить этот объект в базе данных Room, я прочитал о преобразователях типов для преобразования сложных объектов в один файл, который можно сохранить в базе данных. Я получаю эту ошибку:
ошибка: Не уверен, как преобразовать Курсор в тип возврата этого метода (androidx.lifecycle.LiveData>) .----
public abstract 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)
}
}