Kraina Kotlin 1.6.0
Właśnie udostępniliśmy Realm Kotlin 1.6.0 dla Maven Central i Gradle Plugin Portal . Ta wersja zawiera obsługę wywoływania Atlas Functions, nowe typy danych RealmAny i Decimal128, łącza zwrotne dla osadzonych obiektów, aktualizacje bazy danych Core, które znacznie zmniejszają rozmiar baz danych intensywnie zapisujących i wiele więcej.
Obsługa funkcji Atlasu
Możliwe jest teraz wywoływanie Atlas Functions bezpośrednio przez Kotlin SDK. Odbywa się to poprzez nową functionswłaściwość w Userklasie. Jest dostępny po zalogowaniu.
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)
}
Obsługiwane są również obiekty JSON, zarówno jako dane wejściowe, jak i wyjściowe przy użyciu 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()
}
Typy danych RealmAny i Decimal128
RealmAnyto typ danych, który może być używany do modelowania danych, które mają elastyczny schemat i mogą zawierać kilka różnych typów. Wartości null są wyrażane przy użyciu systemu typów 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 aktualizuje również bazę danych Realm Core do wersji 13, co przynosi szereg ulepszeń:
- Realm będzie teraz zużywać znacznie mniej pamięci i miejsca na dysku, gdy używane będą różne wersje obiektów Realm.
- Realm będzie teraz stale śledzić i zmniejszać rozmiar pliku Realm, gdy jest on używany, a nie tylko podczas otwierania pliku z
Configuration.compactOnLaunchwłączonym. - OpenSSL został zaktualizowany z wersji 1.1.1n do wersji 3.0.7.
Skopiuj obiekty z Realm
Funkcja rozszerzająca o nazwie copyFromRealm()została dodana do wszystkich obiektów Realm, list, zestawów i wyników zapytań. Umożliwia to skopiowanie wszystkich danych wewnątrz obiektu z Realm do pamięci i odłączenie go od cyklu życia Realm, tworząc samodzielną kopię.
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()
Wprowadzono nową @PersistedNameadnotację umożliwiającą zmianę mapowania nazw właściwości przechowywanych w Realm. Ułatwia to pracę z nazwami, które nie są idiomatyczne dla platformy, i zmniejsza potrzebę migracji. Podczas wyszukiwania danych można używać zarówno oryginalnych, jak i mapowanych nazw.
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 wprowadza również ulepszenia pracy z linkami zwrotnymi w obiektach osadzonych, obsługę niestandardowych danych użytkownika podczas pracy ze zsynchronizowanymi Realmami, tworzenie kopii domen Flexible Sync, logowanie za pomocą funkcji uwierzytelniania, resetowanie haseł za pomocą funkcji i nie tylko.
Dziękuje za przeczytanie. Teraz idź naprzód i twórz niesamowite aplikacje z Realm! Jak zawsze jesteśmy na Githubie i Twitterze .

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































