【问题标题】:Android/Room/ViewModel : Error while saving ViewModel to Room DatabaseAndroid/Room/ViewModel:将 ViewModel 保存到房间数据库时出错
【发布时间】:2021-04-25 05:15:07
【问题描述】:

我有一个使用 ViewModel 类来存储和管理 UI 相关数据的活动。活动中使用的视图模型类具有类似于下面给出的结构:

class SomeViewModel:ViewModel(){
  @PrimaryKey(autoGenerate=true)
  var id=0

  var field1:Array<Double?>=arrayOf(null,null)
  var field2:Array<Double?>=arrayOf(null,null)
  var field3:Array<Double?>=arrayOf(null,null)

  @Ignore
  val someFragments=HashMap<String,Fragment>()
  @Ignore
  val someMap=HashMap<String,Int>()
}

我要做的是在按下返回以关闭活动时将视图模型对象中的数据保存到本地数据库。但问题是当我尝试这样做时出现错误。

无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。 - androidx.lifecycle.ViewModelerror 中的 mBagOfTags:找不到字段的 getter。 - androidx.lifecycle.ViewModelerror 中的 mBagOfTags:找不到字段的 getter。 - androidx.lifecycle 中的 mCleared

我使用的 TypeConverter 与下面给出的相同:

class Converter{
    @TypeConverter
    fun fromArrayDouble(field:Array<Double?>):String{
        val s=StringBuilder("")
        var first=true
        for(k in field){
            s.append(k.toString())
            if(first){
                s.append(",")
                first=false
            }
        }
        return s.toString()
    }

    @TypeConverter
    fun fromString(str:String):Array<Double?>{
        val parts=str.split(',')
        val res=ArrayList<Double?>()
        for(p in parts){
            try{
                res.add(p.toDouble())
            }catch(e:Exception){
                res.add(null)
            }
        }
        return res.toTypedArray()
    }
}

还有一个类似的数据库类:

@Database(entities=[SomeViewModel::class], version=1, exportSchema=false)
@TypeConverters(Converter:class)
abstract class SomeDatabase:RoomDatabase(){
  // database definition
}

我不明白我哪里出错了。任何帮助将不胜感激。

【问题讨论】:

    标签: android kotlin android-room android-viewmodel


    【解决方案1】:

    请参考另一篇文章的答案。

    Kotlin room does not allow defining variables in entity class start of 'i' character. I had the same error. I solved it, albeit difficult. Replace id with pId and it will be fine.

    或者您可能需要添加 getter 才能被 Room 找到。

    fun getId(): Int {
        return id
    }
    

    【讨论】:

    • 我认为我的问题与以“i”开头的变量无关,因为即使更改名称也不能解决我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2017-02-13
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2022-12-08
    相关资源
    最近更新 更多