TypeConverter() har privat adgang i TypeConverter-fejl med Room i Android
Ændre ikke object
søgeord til class
(som det accepterede svar antyder). Objekterklæringen garanterer Singleton-mønsteret.
Efter automatisk konvertering af TypeConverter
java-fil til kotlin-fil, skal du markere alle indre konverterfunktioner med @JvmStatic
så Værelse kan bruge dem som almindelige statiske funktioner.
Tag et kig på de officielle Android Architecture Components-eksempler, specifikt GithubTypeConverters.kt. Også denne diskussion kan være nyttig. Og dette er min DateTypeConverter.kt
:
object DateTypeConverter {
@TypeConverter
@JvmStatic
fun toDate(timestamp: Long?) = timestamp?.let { Date(timestamp) }
@TypeConverter
@JvmStatic
fun toTimestamp(date: Date?) = date?.time
}
I mit særlige tilfælde konverterede jeg min Java-fil til Kotlin ved hjælp af android studio ctrl+alt+shift+k tastekombination. Hvad Android Studio gjorde, er, at det konverterede min class TypeConverter
klasser til type object TypeConverter
og jeg kunne bare ikke finde ud af, hvorfor min kode holdt op med at virke. Så jeg ændrede manuelt object TypeConverter
til class TypeConverter
.
En ting mere vedrørende konvertering til Kotlin: I tilfælde af Parcelable-klasse tilføjer en kotlin-konverteret fil i Android Studio ikke @JvmField på CREATOR-feltet. Så du bliver nødt til at tilføje den @JvmField val CREATOR
manuelt for at sikre, at klasserne fungerer korrekt.