如何将 Room 数据库中的 ArrayList<Float> 保存为列
How to save ArrayList<Float> in Room Database as column
我需要编写类型转换器来将 ArrayList 保存为列。我试过写转换器,但没有结果,我得到这个错误:
"error: Not sure how to convert a Cursor to this method's return type"
@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>
}
我需要写类型转换器,请帮忙!!
嗯,回答你的问题,我觉得应该是这样的
@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
的列表对您来说不是最好的方法?也许你应该创建单独的 table 记录,其中每个 float
将作为单独的行?
另外,我想,如果你在每一行都有一个 ArrayList<Float>
,你的 getData
方法应该 return 一个 List<ArrayList<Float>>
...
我需要编写类型转换器来将 ArrayList 保存为列。我试过写转换器,但没有结果,我得到这个错误:
"error: Not sure how to convert a Cursor to this method's return type"
@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>
}
我需要写类型转换器,请帮忙!!
嗯,回答你的问题,我觉得应该是这样的
@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
的列表对您来说不是最好的方法?也许你应该创建单独的 table 记录,其中每个 float
将作为单独的行?
另外,我想,如果你在每一行都有一个 ArrayList<Float>
,你的 getData
方法应该 return 一个 List<ArrayList<Float>>
...