Как сохранить ArrayList <Float>в базе данных комнат в виде столбца - PullRequest
0 голосов
/ 18 января 2019

Мне нужно написать конвертер типов, чтобы сохранить 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>

}

Мне нужно написать Type Converter, пожалуйста, помогите !!

1 Ответ

0 голосов
/ 18 января 2019

Ну, отвечая на ваш вопрос, я думаю, что это должно быть что-то вроде

@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>> ...

...