Vương quốc Kotlin 1.6.0
Chúng tôi vừa phát hành Realm Kotlin 1.6.0 cho Maven Central và Gradle Plugin Portal . Bản phát hành này bao gồm hỗ trợ gọi Hàm Atlas, kiểu dữ liệu RealmAny và Decimal128 mới, liên kết ngược cho các đối tượng được nhúng, bản cập nhật cho cơ sở dữ liệu Core giúp giảm đáng kể kích thước của cơ sở dữ liệu nặng ghi, v.v.
Hỗ trợ chức năng Atlas
Giờ đây, có thể gọi các Hàm Atlas trực tiếp thông qua Kotlin SDK. Điều này được thực hiện thông qua một functionsthuộc tính mới trong Userlớp. Nó có sẵn sau khi đăng nhập.
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)
}
Các đối tượng JSON cũng được hỗ trợ, cả ở dạng đầu vào và đầu ra bằng cách sử dụng 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()
}
Kiểu dữ liệu RealmAny và Decimal128
RealmAnylà một loại dữ liệu có thể được sử dụng để mô hình hóa dữ liệu có lược đồ linh hoạt và có thể chứa một số loại khác nhau. Các giá trị null được thể hiện bằng hệ thống loại 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 cũng nâng cấp cơ sở dữ liệu Realm Core lên phiên bản 13, mang lại một số cải tiến:
- Giờ đây, vương quốc sẽ sử dụng ít bộ nhớ và dung lượng ổ đĩa hơn khi sử dụng các phiên bản khác nhau của các đối tượng vương quốc.
- Giờ đây, Realm sẽ liên tục theo dõi và giảm kích thước của tệp Realm khi nó được sử dụng thay vì chỉ khi mở tệp được
Configuration.compactOnLaunchbật. - OpenSSL đã được nâng cấp từ 1.1.1n lên 3.0.7.
Sao chép các đối tượng từ Realm
Một chức năng mở rộng có tên copyFromRealm()đã được thêm vào tất cả các đối tượng, danh sách, bộ và kết quả truy vấn của Realm. Điều này cho phép sao chép tất cả dữ liệu bên trong đối tượng từ Realm vào bộ nhớ và tách dữ liệu đó khỏi vòng đời Realm để tạo một bản sao độc lập.
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()
Một chú thích mới @PersistedNameđã được giới thiệu để có thể ánh xạ lại các tên thuộc tính được lưu trữ trong Realm. Điều này giúp dễ dàng làm việc với các tên không phải là thành ngữ của nền tảng và giảm nhu cầu di chuyển. Cả tên gốc và tên được ánh xạ đều có thể được sử dụng khi truy vấn dữ liệu.
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 cũng mang đến những cải tiến để làm việc với các liên kết ngược trong các đối tượng được nhúng, hỗ trợ dữ liệu người dùng tùy chỉnh khi làm việc với các Realm được đồng bộ hóa, tạo bản sao của các Realm Đồng bộ hóa linh hoạt, đăng nhập bằng các chức năng xác thực, đặt lại mật khẩu bằng các chức năng, v.v.
Cảm ơn vì đã đọc. Bây giờ hãy tiếp tục và xây dựng các ứng dụng tuyệt vời với Realm! Như thường lệ, chúng tôi có mặt trên Github và Twitter .

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































