Estoy creando un alimento de clase Entity (Room Persistence lib), donde quiero hacer foodIdcomo autoincremento.
@Entity
class Food(var foodName: String, var foodDesc: String, var protein: Double, var carbs: Double, var fat: Double)
{
    @PrimaryKey
    var foodId: Int = 0
    var calories: Double = 0.toDouble()
}¿Cómo puedo configurar foodIdun campo de autoincremento?
                    
                        android
                                kotlin
                                android-room
                                
                    
                    
                        chandil03
fuente
                
                fuente

0.toDouble()usar, puede0.0declararlo como un dobleRespuestas:
Necesitas usar la
autoGeneratepropiedadSu anotación de clave principal debería ser así:
Referencia para PrimaryKey .
fuente
@Entity( primaryKeys = arrayOf(COLUMN_ID_LOCAL,COLUMN_ID_REMOTE))?Insert methods treat 0 as not-set while inserting the item.Puedes agregar
@PrimaryKey(autoGenerate = true)así:fuente
foodIdno necesita ser nulo (pero puede serlo). También se podrían usar valores predeterminados, por ejemplo.var foodId: Int = 0y el autogenerado funcionaría correctamente.intolong, 0 se trata como nulo, cuando el tipo es Entero o Largo, nulo es nulo. Dado que Kotlin Int cuando los valores no nulables funcionan en JVM como int primitivo, ¿tiene razón yvar foodId: Int = 0funcionará, perovar foodId: Int? = 0no funcionará desde Int? se convierte en JVM como Integer. @JMK, si lo pone a 0, DEBE hacer un no anulableintpor la razón mencionada anteriormente.val jack = User(name = "Jack", phone= 1)en este caso, puede eliminar 0 del constructorfoodIdse colocó en el cuerpo y no en el constructor?añadir
@PrimaryKey(autoGenerate = true)mientras almacena datos
tipo 2
Poner nulo o cero para la identificación al crear el objeto (mi objeto de usuario de caso)
Si el tipo de campo es largo o int (o su TypeConverter lo convierte en largo o int), los métodos de inserción tratan 0 como no establecido al insertar el elemento.
Si el tipo de campo es Integer o Long (Object) (o su TypeConverter lo convierte en Integer o Long), los métodos de inserción tratan nulo como no establecido al insertar el elemento.
fuente
val jack = User(name = "Jack", phone= 1)En este caso, puede eliminar 0 del constructorfuente
@PrimaryKey(autoGenerate = true)": ¿su respuesta agrega algo nuevo a este hilo?Por ejemplo, si tiene una
usersentidad que desea almacenar, con campos(firstname, lastname , email)y desea una identificación autogenerada, haga esto.La sala generará automáticamente e incrementará automáticamente el
idcampo.fuente
@PrimaryKey(autoGenerated = true) val id: Long? = nullfuera del constructor, en el cuerpo de la claseAnote su clase de entidad con el código anterior.
En java
En kotlin
La sala generará automáticamente e incrementará automáticamente el campo id.
fuente