Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
634 views
in Technique[技术] by (71.8m points)

kotlin - How to create instance of a data class for android Room which has fields with default values?

Example:

@Entity(tableName = "data")
data class Data(@PrimaryKey(autoGenerate = true) val id: Int = 0,
                @ColumnInfo(name = "blob") val blob: ByteArray,
                @ColumnInfo(name = "timestamp", defaultValue = "(strftime('%s','now'))")
                val timetamp: String)
                 

How to create an instance of this class? I want to create it like this:

Data(blob = byteArrayOf(1,2,3))

I have found a way for this example using default parameter values(updated declaration below), but for ordinary fields, I don't know how to specify a not nullable value which will be considered as no value: I have tried ColumnInfo.VALUE_UNSPECIFED,"NULL","" but no luck with it.

@Entity(tableName = "data")
data class Data(@PrimaryKey(autoGenerate = true) val id: Int = 0,
                @ColumnInfo(name = "blob") val blob: ByteArray,
                @ColumnInfo(name = "timestamp")
                val timetamp: String = System.currentTimeMillis.toString())

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You are close, put all the has-default-value parameters AT THE END, like this:

@Entity(tableName = "data")
data class Data(
    @ColumnInfo(name = "blob") 
    val blob: ByteArray,

    @PrimaryKey(autoGenerate = true) 
    val id: Int = 0,

    @ColumnInfo(name = "timestamp")
    val timetamp = System.currentTimeMillis()   //use Long type for time, recommended
)

Then you can just Data(byteArrayOf(1,2,3)).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...