Royaume Kotlin 1.6.0
Nous venons de publier Realm Kotlin 1.6.0 sur Maven Central et Gradle Plugin Portal . Cette version inclut la prise en charge de l'appel des fonctions Atlas, des nouveaux types de données RealmAny et Decimal128, des backlinks pour les objets intégrés, des mises à jour de la base de données Core qui réduisent considérablement la taille des bases de données à forte écriture, et bien plus encore.
Prise en charge des fonctions Atlas
Il est désormais possible d'appeler les fonctions Atlas directement via le SDK Kotlin. Cela se fait via une nouvelle functionspropriété dans la Userclasse. Il est disponible après connexion.
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)
}
Les objets JSON sont également pris en charge, à la fois en entrée et en sortie à l'aide de 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()
}
Types de données RealmAny et Decimal128
RealmAnyest un type de données qui peut être utilisé pour modéliser des données qui ont un schéma flexible et peuvent contenir plusieurs types différents. Les valeurs nulles sont exprimées à l'aide du système de type Kotlin :
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 met également à niveau la base de données Realm Core vers la version 13, ce qui apporte un certain nombre d'améliorations :
- Realm utilisera désormais beaucoup moins de mémoire et d'espace disque lorsque différentes versions d'objets de domaine sont utilisées.
- Realm suivra et réduira désormais en continu la taille du fichier Realm lorsqu'il est utilisé plutôt que seulement lors de l'ouverture du fichier avec
Configuration.compactOnLaunchactivé. - OpenSSL a été mis à jour de 1.1.1n à 3.0.7.
Copier des objets de Realm
Une fonction d'extension appelée copyFromRealm()a été ajoutée à tous les objets, listes, ensembles et résultats de requête Realm. Cela permet de copier toutes les données à l'intérieur de l'objet de Realm dans la mémoire et de les détacher du cycle de vie de Realm en créant une copie autonome.
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()
Une nouvelle @PersistedNameannotation a été introduite permettant de remapper les noms de propriété stockés dans Realm. Cela facilite le travail avec des noms qui ne sont pas idiomatiques de la plate-forme et réduit le besoin de migrations. Les noms d'origine et mappés peuvent être utilisés lors de la recherche de données.
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 apporte également des améliorations à l'utilisation des backlinks dans les objets intégrés, la prise en charge des données utilisateur personnalisées lors de l'utilisation de Realms synchronisés, la création de copies de Realms Flexible Sync, la connexion à l'aide de fonctions d'authentification, la réinitialisation des mots de passe à l'aide de fonctions, etc.
Merci d'avoir lu. Maintenant, lancez-vous et créez des applications incroyables avec Realm ! Comme toujours, nous sommes présents sur Github et Twitter .
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































