Tworzę jedzenie klasy Entity (Room Persistence lib), w którym chcę zrobić foodId
jako autowzrost.
@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()
}
Jak mogę ustawić foodId
pole autoinkrementacji?
android
kotlin
android-room
chandil03
źródło
źródło
0.toDouble()
możesz użyć0.0
deklaruj jako podwójnyOdpowiedzi:
Musisz skorzystać z
autoGenerate
właściwościAdnotacja klucza podstawowego powinna wyglądać następująco:
Odwołanie do PrimaryKey .
źródło
@Entity( primaryKeys = arrayOf(COLUMN_ID_LOCAL,COLUMN_ID_REMOTE))
?Insert methods treat 0 as not-set while inserting the item.
Możesz dodać w
@PrimaryKey(autoGenerate = true)
ten sposób:źródło
foodId
nie musi być zerowy (ale może być). Można również użyć wartości domyślnych np.var foodId: Int = 0
i automatyczne generowanie działałoby poprawnie.int
lublong
, 0 jest traktowane jako nullable, gdy typem jest liczba całkowita lub długa, null jest zerowalne. Ponieważ Kotlin Int, gdy niepenulowalna działa w JVM jako prymitywna int, masz rację ivar foodId: Int = 0
będziesz działać, alevar foodId: Int? = 0
nie będzie działać od Int? jest konwertowany w JVM jako liczba całkowita. @JMK, jeśli zrobisz to 0, MUSISZ zrobić niezerowąint
z wyżej wymienionego powodu.val jack = User(name = "Jack", phone= 1)
W tym przypadku możesz usunąć 0 z konstruktorafoodId
został umieszczony w ciele, a nie w konstruktorze?Dodaj
@PrimaryKey(autoGenerate = true)
podczas przechowywania danych
typ 2
Ustaw wartość zerową lub zerową dla identyfikatora podczas tworzenia obiektu (obiekt użytkownika mojego przypadku)
Jeśli typ pola jest długi lub int (lub jego TypeConverter konwertuje go na long lub int), metody Insert traktują 0 jako nieustawione podczas wstawiania elementu.
Jeśli typ pola to Integer lub Long (Object) (lub jego TypeConverter konwertuje go na Integer lub Long), metody Insert traktują wartość null jako nieustawioną podczas wstawiania elementu.
źródło
val jack = User(name = "Jack", phone= 1)
W tym przypadku możesz usunąć 0 z konstruktoraźródło
@PrimaryKey(autoGenerate = true)
” - czy twoja odpowiedź dodaje coś nowego do tego wątku?Na przykład, jeśli masz
users
encję, którą chcesz przechowywać, wraz z polami(firstname, lastname , email)
i chcesz automatycznie wygenerowanego identyfikatora, robisz to.Pokój automatycznie wygeneruje i automatycznie zwiększy
id
pole.źródło
@PrimaryKey(autoGenerated = true) val id: Long? = null
poza konstruktorem, na ciele klasyOpisz swoją klasę Entity za pomocą powyższego kodu.
W Javie
W Kotlinie
Pokój automatycznie wygeneruje i automatycznie zwiększy pole identyfikatora.
źródło