问题标签 [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.
android - 有没有更好的方法来处理 kotlinx 序列化?
我kotlinx.serialization
在 Kotlin 原生项目上使用,我Super class
为我的模型定义了一个,所有模型都从它扩展而来。我定义了一个function
要求toJSON()
序列化模型内部的变量和字段的方法,所有类模型都有它。
我创建了一个子类
但是当我调用IDE 时JSON.stringify(this)
,IDE 会向我发出警告:
这个声明是实验性的,它的使用必须用 '@kotlinx.serialization.ImplicitReflectionSerializer' 或 '@UseExperimental(kotlinx.serialization.ImplicitReflectionSerializer::class)' 标记
我注意了,我@ImplicitReflectionSerializer
在没有工作的时候使用了注释。我的问题在哪里?
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 文件?
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)。
json - 如何在 Kotlin 本机上通过 Kotlinx 序列化创建嵌套 JSON
我通过 Kotlin 多平台创建了一个共享库,我使用Kotlin Serialization
库进行序列化和反序列化,我Graph QL
在我的项目上实现,我使用下面的结构
为了与 进行通信API
,现在我有一个问题,我应该将 a 填写Json
为by,Object
但是当我填写为 String 并获得例外时,我找不到解决方法。variables
Kotlinx.Serialization
varibales
API
如何通过 Kotlinx.Serialization 创建嵌套的 Json?
kotlin - 处理 HttpClient Ktor 中的异常
我在下面的通用模块中编写了通用代码并在JS环境中进行了测试
但是我的代码以 client.post 结尾,并在没有网络上取消了 corutineException。我该如何处理这个和任何其他异常?如果有互联网连接。没有什么失败,我希望能够处理异常。如何?
注意:try,catch 不起作用
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* 引用的示例:
intellij-idea - 预期类没有实际声明
我正在做一个多平台项目。
我的 gradle 文件的一部分看起来像这样
现在在 commonsMain 来源中,我收到一个 IDE 错误(红色下划线),上面写着“预期的类 Sample 在 apiMain 中没有实际声明”,但 apiMain 取决于具有实际声明的 jvmMain。
我认为我不需要在 apiMain 中进行实际声明,因为我已经在 jvm 中有一个。
我应该采取不同的方法来设置我的源集吗?
无论如何,项目编译得很好,我可以运行 apiMain,但 IDE 错误真的让我很恼火。
android - KTor URLBuilder encodedPath 与动态路径
我正在尝试使用ktor
. 我的GET
请求代码是这样的:
在某些时候,我的路径包含这样的用户 ID /users/{user_id}
。我可以在字符串中进行搜索和替换并将其替换user_id
为实际值,但是还有其他方法可以做到这一点吗?任何ktor
特定的方式。
例如,Retrofit
我们有这个:
编辑:添加更多代码
request.path?.forEach { requestPath = requestPath.replace(it.first, it.second)}
替换任何运行时路径值。
android - 如何在 Kotlin 多平台 Android 测试中获取 Android 上下文?
我有以下build.gradle
文件:
在src/androidTest/kotlin/..
我有以下测试:
它崩溃了setUp()
:
我应该怎么办?我查看了JetBrains mpp android test example,但它不使用 android 上下文,所以没有这个异常。
PS。我能够毫无问题地运行常见测试。
gradle - 项目中没有解析`runBlocking`协程构建器(其他构建器已解决)
正如标题所示,runBlocking
我刚刚在 build.gradle 中添加的协程库中缺少协程构建器。有趣的是,其他所有东西似乎都可用GlobalScope
,CoroutineScope.launch
CoroutineScope.async
全部都存在。runBlocking
不是。我究竟做错了什么?
这是我的build.gradle
使用该 gradle 配置,我已经能够使用 kotlin-multiplatform 很好地编写测试(学习 TDD)。下面是我的示例
如果您仔细观察,测试testingCoroutines
通过了,但由于我是从 启动的GlobalScope
,所以它只是触发并忘记并且测试返回而不会引发任何错误。如果我runBlocking
加入 ,IDE 会用红色突出显示它(你知道,因为它不明白),甚至 kotlin 编译器都会喊,unresolved reference runBlockin
. 请帮忙....