如何在会议室数据库中将ArrayList <float>保存为列

时间:2019-01-18 09:39:45

标签: arraylist kotlin typeconverter

我需要编写类型转换器以将ArrayList保存为列。我曾尝试编写转换器,但没有结果,我收到此错误:

  

“错误:不确定如何将游标转换为此方法的返回类型”

@Entity(tableName = "WeightRecords")
class WeightRecords : Serializable {

  @PrimaryKey(autoGenerate = true)
  var id: Long = 0

  @ColumnInfo(name = "weightRecords")
  var weightRecords: Double = 0.0

  @ColumnInfo(name = "days")
  var days: String = ""

  @ColumnInfo(name = "data")
  var data: ArrayList<Float>? = ArrayList()
}

@Dao
abstract class WeightRecordDao : BaseDao<WeightRecords>() {

  @Insert(onConflict = OnConflictStrategy.REPLACE)
  abstract fun insertWeightRecords(weightRecords: WeightRecords): Long


  @Query("SELECT data FROM WeightRecords")
  abstract fun getData(): ArrayList<Float>

}

我需要写类型转换器,请帮忙!

1 个答案:

答案 0 :(得分:0)

好吧,回答您的问题,我想应该是这样的

@TypeConverter
fun fromArrayListOfFloats(list: ArrayList<Float>?): String {
    return list?.joinToString(separator = ";") { it.toString() } ?: ""
}

@TypeConverter
fun toArrayListOfFloats(string: String?): ArrayList<Float> {
    return ArrayList(string?.split(";")?.mapNotNull { it.toFloatOrNull() } ?: emptyList())
}

但是也许存储floats的列表对您来说不是最好的方法?也许您应该创建单独的记录表,其中每个float都将作为单独的行?

此外,我想,如果每行都有ArrayList<Float>,则您的getData方法应该返回List<ArrayList<Float>> ...