问题标签 [kotlin-multiplatform]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1766 浏览

android - 有没有更好的方法来处理 kotlinx 序列化?

kotlinx.serialization在 Kotlin 原生项目上使用,我Super class为我的模型定义了一个,所有模型都从它扩展而来。我定义了一个function要求toJSON()序列化模型内部的变量和字段的方法,所有类模型都有它。

我创建了一个子类

但是当我调用IDE 时JSON.stringify(this),IDE 会向我发出警告:

这个声明是实验性的,它的使用必须用 '@kotlinx.serialization.ImplicitReflectionSerializer' 或 '@UseExperimental(kotlinx.serialization.ImplicitReflectionSerializer::class)' 标记

我注意了,我@ImplicitReflectionSerializer在没有工作的时候使用了注释。我的问题在哪里?

0 投票
1 回答
341 浏览

gradle - Kotlin 1.3.20 与 Gradle 5.1.1 compileKotlin2Js 执行热重载

在 Kotlin 1.3.20 和 Gradle 4.10.2 中,可以在 Gradle 中使用以下内容热重载 js 文件:

但是,我们会收到以下警告:

此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 5.0 不兼容。

使用 Kotlin 1.3.20 / Gradle 5.1.1,弃用警告消失,但 compileKotlin2Js.execute() 导致以下错误:

指定为非空的参数为空:方法 org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile.execute,参数输入

有没有办法使用 Kotlin 1.3.20 / Gradle 5.1.1 编译 Kotlin2Js.execute() 以热重载 js 文件?

0 投票
1 回答
281 浏览

android - 是否可以创建引用公共模块的正确目标的 kotlin 多平台项目?

如果我们想用 Kotlin 构建一个多平台项目,并且我们有这样的结构:

common模块中,我们有 3 个目标/预设:

  • jvm(所有基于 jvm 的项目的通用代码)
  • jvmAndroid(与所有 jvm android 项目的通用代码,取决于 jvm)
  • jvmApi(所有 jvm api 项目的通用代码,取决于 jvm)

我们如何正确配置我们build.gradle的 s 文件以仅依赖于正确的预设/目标?

例如,如果我们想在我们的其他项目中使用 common 模块作为依赖项,我们需要使用类似的东西:

但是,是否可以只使用公共模块的正确部分?像这样的东西(对于android 1和2)?

否则,当我们使用implementation project(':common')它时,将获取所有 jvm 预设/目标,但某些代码仅在正确的平台上有意义或工作(在本例中为 android 或 api)。

0 投票
2 回答
749 浏览

json - 如何在 Kotlin 本机上通过 Kotlinx 序列化创建嵌套 JSON

我通过 Kotlin 多平台创建了一个共享库,我使用Kotlin Serialization库进行序列化和反序列化,我Graph QL在我的项目上实现,我使用下面的结构

为了与 进行通信API,现在我有一个问题,我应该将 a 填写Json为by,Object但是当我填写为 String 并获得例外时,我找不到解决方法。variablesKotlinx.SerializationvaribalesAPI

如何通过 Kotlinx.Serialization 创建嵌套的 Json?

0 投票
2 回答
7399 浏览

kotlin - 处理 HttpClient Ktor 中的异常

我在下面的通用模块中编写了通用代码并在JS环境中进行了测试

但是我的代码以 client.post 结尾,并在没有网络上取消了 corutineException。我该如何处理这个和任何其他异常?如果有互联网连接。没有什么失败,我希望能够处理异常。如何?

注意:try,catch 不起作用

0 投票
1 回答
913 浏览

kotlin - 无法在 Kotlin Multiplatform 项目中引用 kotlinx.cinterop 包

我创建了一个基于 iOS 和 Android 示例的 Kotlin Multiplatform 项目 ( https://kotlinlang.org/docs/tutorials/native/mpp-ios-android.html )。在我的 iOS 目标中,我使用 cinterop 链接到第 3 方 Objective-C 框架。这工作正常。我可以在“iosMain”源集中的 Kotlin 代码中引用框架类。但是,其中一个方法调用需要一个 NSError** 参数。我正在尝试使用以下内容在我的 Kotlin 代码中创建此变量:

我无法解决以下错误:

我的理解是这个包是stdlib的一部分,应该自动添加为依赖项。我是否在某处遗漏了方程式的一部分?

更新

以下是从 Kotlin 传递 NSError* 引用的示例:

0 投票
2 回答
2161 浏览

intellij-idea - 预期类没有实际声明

我正在做一个多平台项目。

我的 gradle 文件的一部分看起来像这样

现在在 commonsMain 来源中,我收到一个 IDE 错误(红色下划线),上面写着“预期的类 Sample 在 apiMain 中没有实际声明”,但 apiMain 取决于具有实际声明的 jvmMain。

我认为我不需要在 apiMain 中进行实际声明,因为我已经在 jvm 中有一个。

我应该采取不同的方法来设置我的源集吗?

无论如何,项目编译得很好,我可以运行 apiMain,但 IDE 错误真的让我很恼火。

0 投票
0 回答
1291 浏览

android - KTor URLBuilder encodedPath 与动态路径

我正在尝试使用ktor. 我的GET请求代码是这样的:

在某些时候,我的路径包含这样的用户 ID /users/{user_id}。我可以在字符串中进行搜索和替换并将其替换user_id为实际值,但是还有其他方法可以做到这一点吗?任何ktor特定的方式。

例如,Retrofit我们有这个:

编辑:添加更多代码

request.path?.forEach { requestPath = requestPath.replace(it.first, it.second)}替换任何运行时路径值。

0 投票
1 回答
1715 浏览

android - 如何在 Kotlin 多平台 Android 测试中获取 Android 上下文?

我有以下build.gradle文件:

src/androidTest/kotlin/..我有以下测试:

它崩溃了setUp()

我应该怎么办?我查看了JetBrains mpp android test example,但它不使用 android 上下文,所以没有这个异常。

PS。我能够毫无问题地运行常见测试。

0 投票
1 回答
1905 浏览

gradle - 项目中没有解析`runBlocking`协程构建器(其他构建器已解决)

正如标题所示,runBlocking我刚刚在 build.gradle 中添加的协程库中缺少协程构建器。有趣的是,其他所有东西似乎都可用GlobalScopeCoroutineScope.launch CoroutineScope.async全部都存在。runBlocking不是。我究竟做错了什么?

这是我的build.gradle

使用该 gradle 配置,我已经能够使用 kotlin-multiplatform 很好地编写测试(学习 TDD)。下面是我的示例

如果您仔细观察,测试testingCoroutines通过了,但由于我是从 启动的GlobalScope,所以它只是触发并忘记并且测试返回而不会引发任何错误。如果我runBlocking加入 ,IDE 会用红色突出显示它(你知道,因为它不明白),甚至 kotlin 编译器都会喊,unresolved reference runBlockin. 请帮忙....