Realm Kotlin 1.6.0
Wir haben gerade Realm Kotlin 1.6.0 für Maven Central und Gradle Plugin Portal veröffentlicht . Diese Version umfasst Unterstützung für den Aufruf von Atlas-Funktionen, neue RealmAny- und Decimal128-Datentypen, Backlinks für eingebettete Objekte, Aktualisierungen der Core-Datenbank, die die Größe schreibintensiver Datenbanken erheblich reduzieren, und vieles mehr.
Unterstützung für Atlas-Funktionen
Es ist jetzt möglich, Atlas Functions direkt über das Kotlin SDK aufzurufen. Dies geschieht durch eine neue functionsEigenschaft in der UserKlasse. Es ist nach dem Einloggen verfügbar.
runBlocking {
val app = App("my-app-id")
val credentials = Credentials.usernamePassword("my-email", "my-password")
val user: User = app.login(credentials)
// Call a function configured on Atlas App Services
val response: String = user.functions.call("function-name", "foo", 42)
}
JSON-Objekte werden ebenfalls unterstützt, sowohl als Eingabe als auch als Ausgabe mithilfe von BsonDocument.
runBlocking {
val user: User = getUser()
val inputObj = BsonDocument("param1" to BsonString("value1"), "param2" to BsonInt32(42))
val responseObj: BsonDocument = functions.call("foo", inputObj)
val name: BsonString = responseObj["name"]!!.asString()
val age: BsonInt32 = responseObj["age"]!!.asInt32()
}
RealmAny- und Decimal128-Datentypen
RealmAnyist ein Datentyp, der zum Modellieren von Daten verwendet werden kann, die über ein flexibles Schema verfügen und mehrere verschiedene Typen enthalten können. Nullwerte werden mit dem Kotlin-Typsystem ausgedrückt:
import io.realm.kotlin.types.RealmAny
class Person: RealmObject {
var mixed: RealmAny? = null // Must be marked with `?`
}
val obj: Person = realm.write {
copyToRealm(Person().apply {
mixed = RealmAny.create("stringValue")
})
}
when (obj.mixed?.type) {
RealmAny.Type.INT -> showInteger(obj.mixed.asInt())
RealmAny.Type.STRING -> showString(obj.mixed.asString())
null -> showNull()
else -> throw IllegalStateException()
}
import org.mongodb.kbson.Decimal128
// Usage in model classes
class Person: RealmObject {
var floatingPoint: Decimal128 = Decimal128("0.73e-7")
var list: RealmList<Decimal128> = realmListOf()
}
Realm Kotlin 1.6.0 aktualisiert außerdem die Realm Core-Datenbank auf Version 13, was eine Reihe von Verbesserungen mit sich bringt:
- Realm verbraucht jetzt viel weniger Arbeitsspeicher und Speicherplatz, wenn verschiedene Versionen von Realm-Objekten verwendet werden.
- Realm verfolgt und reduziert nun kontinuierlich die Größe der Realm-Datei, wenn sie verwendet wird, und nicht nur, wenn die Datei mit
Configuration.compactOnLaunchaktivierter Funktion geöffnet wird. - OpenSSL wurde von 1.1.1n auf 3.0.7 aktualisiert.
Objekte aus Realm kopieren
copyFromRealm()Allen Realm-Objekten, Listen, Mengen und Abfrageergebnissen wurde eine Erweiterungsfunktion namens hinzugefügt. Dadurch ist es möglich, alle Daten innerhalb des Objekts vom Realm in den Speicher zu kopieren und sie vom Realm-Lebenszyklus zu trennen, wodurch eine eigenständige Kopie entsteht.
class Person: RealmObject {
var name: String = ""
var children: RealmList<Person> = realmListOf()
}
val configuration = RealmConfiguration.create(schema = setOf(Person::class))
val realm = Realm.open(configuration)
val managedObj: Person = realm.writeBlocking {
copyToRealm(Person())
}
// Copy managed objects
val unmanagedObj = managedObj.copyFromRealm()
assertFalse(unmanagedObj.isManaged())
// Copy collections list RealmList and RealmSet
val copiedList: List<Person> = managedObj.children.copyFromRealm()
// Copy query results
val persons: List<Person> = realm.query<Person>().find().copyFromRealm()
Es wurde eine neue @PersistedNameAnmerkung eingeführt, die es ermöglicht, in Realm gespeicherte Eigenschaftsnamen neu zuzuordnen. Dies erleichtert die Arbeit mit Namen, die nicht plattformspezifisch sind, und verringert den Bedarf an Migrationen. Bei der Datenabfrage können sowohl der ursprüngliche als auch der zugeordnete Name verwendet werden.
class Person: RealmObject {
@PersistedName("_id")
var id = ObjectId()
}
// Both of these will work
val person1 = realm.query<Person>("_id = $0", getId()).first().find()
val person2 = realm.query<Person>("id = $0", getId()).first().find()
Realm Kotlin 1.6.0 bringt außerdem Verbesserungen bei der Arbeit mit Backlinks in eingebetteten Objekten, Unterstützung für benutzerdefinierte Benutzerdaten bei der Arbeit mit synchronisierten Realms, das Erstellen von Kopien von Flexible Sync-Realms, die Anmeldung mithilfe von Authentifizierungsfunktionen, das Zurücksetzen von Passwörtern mithilfe von Funktionen und mehr.
Danke fürs Lesen. Machen Sie jetzt weiter und erstellen Sie fantastische Apps mit Realm! Wie immer sind wir auf Github und Twitter für Sie da .

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































