将 Kotlin 多平台本地领域应用程序升级到云显示未解析的引用

问题描述 投票:0回答:1

我正在从本地 Realm 转换为由 MongoDB 服务器支持的 Realm。我按照 tutorial 进行操作,一切似乎都很顺利,但是当我尝试编写连接代码时,我在 MongoClient.create 上得到了一个未解决的参考。

我的代码如下所示:

import com.mongodb.reactivestreams.client.MongoClient
import io.realm.kotlin.Realm
import io.realm.kotlin.RealmConfiguration
import io.realm.kotlin.ext.isManaged
import io.realm.kotlin.ext.query
import io.realm.kotlin.query.RealmResults
import org.mongodb.kbson.ObjectId
import todaysDateAsLong
import kotlinx.coroutines.runBlocking
import org.w3c.dom.Document
import javax.management.Query.eq


fun connectToRealmServer()  {
// Replace the placeholders with your credentials and hostname
val uri = "mongodb+srv://MyCompany:<password>@atlascluster.j1c9yxd.mongodb.net/?retryWrites=true&w=majority&appName=AtlasCluster"

val mongoClient = MongoClient.create(uri) //<-- UNRESEOLVED REFERENCE on .create
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Document>("movies")
runBlocking {
    val doc = collection.find(eq("title", "Back to the Future")).firstOrNull()
    if (doc != null) {
        println(doc.toJson())
    } else {
        println("No matching documents found.")
    }
}
mongoClient.close()
}

我的 build.gradle 看起来像这样(缩小到仅相关区域)

plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidApplication)
alias(libs.plugins.jetbrainsCompose)
id("io.realm.kotlin") version "1.11.1"
}

....

dependencies {
implementation(libs.androidx.material)
implementation(libs.androidx.material3.android)
implementation(libs.mongodb.driver.kotlin.coroutine)
implementation(libs.bson.kotlinx)
}

相关的 libs.version.toml 条目如下所示:

mongodb-driver-kotlin-coroutine = { module = "org.mongodb:mongodb-driver-kotlin-coroutine", version = "5.1.0" }

[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }
androidLibrary = { id = "com.android.library", version.ref = "agp" }
jetbrainsCompose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" }
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = 
"kotlin" }

有人能发现我做错了什么吗?从本地领域到云的过程中,我是否需要删除可能导致此问题的内容?

附图显示了 Android Studio 中的一些配置,以防有帮助。

enter image description here

kotlin realm kotlin-multiplatform realm-migration
1个回答
0
投票

有几件事:

我建议查看有关将同步添加到应用程序的入门文档,因为它非常简单且经过充分测试将设备同步添加到应用程序 - Kotlin SDK

如果您使用

MongoClient.create
(根据问题),那么需要传递一个 MongoClientSettings 对象。该对象应该用 .builder 实例化。像这样的一些简短的代码就可以了

val mongoClient = MongoClient.create(
    MongoClientSettings.builder()
        .applyConnectionString(ConnectionString("<your connection string>"))
        .build()
)

连接字符串将采用这种格式

"mongodb+srv:/<username>:<password>@<hostname>:<port>?connectTimeoutMS(2000)"

ConnectionString 类还有其他选项。

© www.soinside.com 2019 - 2024. All rights reserved.