繁体   English   中英

如何使用 Kotlin 在 Room 中保存对象列表?

[英]How to save a list of objects in Room using Kotlin?

I need to save some data from my API in my Room database, so i've just created my model as the API response in my android project but when i try to run it the app require to set the Entity even to my object which is仅设置为给出 object 的定义,它将保存在我的数据库中...

那么,在我的 Room 数据库中的 object 中,哪种方法是保存对象数组的正确方法?

这是我的模型的样子:

@Entity(tableName = "articoli_server_table")
data class ArticoliServer(
    @PrimaryKey(autoGenerate = false)
    var codart: String,
    var desc: String,
    var prezzo_acq: Float,
    var prezzo_vend: Float,
    var barcode: List<barcode>,
    var qta: Float
)


data class barcode(
    var barcode: String,
    var qta: Float
)

您可以采用几种方法将条形码数据列表保存在数据库中:

1. 您可以将自定义TypeConverter用于您的条形码对象列表,例如,您可以将对象列表保存为以下形式的单个字符串(逗号分隔值): "barcode1,qta1,barcode2,qta2,.." ,实现可能是这样的:

@Entity(tableName = "articoli_server_table")
@TypeConverters(BarcodeListConverter::class)
data class ArticoliServer(
    @PrimaryKey(autoGenerate = false)
    var codart: String,
    var desc: String,
    var prezzo_acq: Float,
    var prezzo_vend: Float,
    var barcode: List<barcode>?,
    var qta: Float
)


data class barcode(
    var barcode: String,
    var qta: Float
)


object BarcodeListConverter {
    @TypeConverter
    fun toString(barcodeList: List<barcode>?): String? {
        if (barcodeList == null) return null

        val stringList = mutableListOf<String>()
        barcodeList.forEach {
            stringList.add(it.barcode)
            stringList.add(it.qta.toString())
        }

        return stringList.joinToString(",")
    }

    @TypeConverter
    fun toBarcodeList(str: String?): List<barcode>? {
        if (str == null) return null

        val barcodeList = mutableListOf<barcode>()

        val strList = str.split(",")
        for (i in strList.indices step 2) {
            barcodeList.add(barcode(strList[i], strList[i + 1].toFloat()))
        }

        return barcodeList
    }
}

2. 您可以在您的数据库中为您的条形码实体创建一个新实体(DB 表) ,并在您的ArticoliServerbarcode实体之间创建一对多的关系。 您可以查看此页面以获取有关定义与Room持久性库的关系的更多信息。

PS我建议您实施第二种方法,以防您有许多条形码对象要保存在数据库中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM