标签: kotlin-multiplatform

如果我使用submitFormWithBinaryData(),如何向 ktor 请求添加标头?

下面的代码是使用 ktor 和 kmm 上传文件......

val client = HttpClient(Apache) {}
    val file = File("path/to/some.file")
    val chatId = "123"
    
    client.submitFormWithBinaryData(
        url = "https://api.telegram.org/bot<token>/sendDocument?chat_id=$chatId",
        formData = formData {
            append("document", file.readBytes(), Headers.build {
                append(HttpHeaders.ContentDisposition, "filename=${file.name}")
            })
        }
    )
Run Code Online (Sandbox Code Playgroud)

android kotlin ktor kotlin-multiplatform kmm

3
推荐指数
1
解决办法
4745
查看次数

使用 kotlinx-datetime KMM 获取本周的天数

如何使用 kotlinx.datetime KMM 库获取本周的日期?

例如。我想获取本周日期的列表,例如:

“星期一,07”“星期二,08”“星期三,09”,...)

这是使用Calendar 的类似实现:

fun getDaysOfWeek(): Array<String?> {
        val dateFormat = SimpleDateFormat("EEEEE\ndd", Locale.getDefault())
        val calendar = Calendar.getInstance()
        calendar.firstDayOfWeek = Calendar.MONDAY
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY)

        val days = arrayOfNulls<String>(7)
        for (i in 0..6) {
            days[i] = dateFormat.format(calendar.time)
            calendar.add(Calendar.DAY_OF_MONTH, 1)
        }

        return days
    }
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-multiplatform kotlin-multiplatform-mobile kotlinx-datetime

3
推荐指数
1
解决办法
2332
查看次数

如何向 Kotlin 多平台移动项目添加桌面支持

我使用 Android Studio 和 Kotlin Multiplatform Mobile 插件创建了一个 KMM 项目,它提供对 Android 和 iOS 的支持。

但是,我还希望能够使用相同的代码库和 UI 进行部署以创建桌面应用程序。那可能吗?如果是的话,怎么办?

mobile desktop kotlin-multiplatform

3
推荐指数
1
解决办法
2451
查看次数

如何在 Swift 中访问 KMMShared MutableStateFlow 对象

我有一个带有 MutableStateFlow 的 KmmShared 单例类,它可以在 Android 上正常工作。我需要知道访问此 Singleton 类及其 MutableStateFlow 变量的最佳方法,并在 SwiftUI 应用程序中进行更新。

class MySingeltonClass {
    private val _selectedType: MutableStateFlow<MyEnum> = MutableStateFlow(getUserPrefsType())
    var selectedType = _selectedType.asStateFlow()

    private fun getUserPrefsType() : MyEnum {
        // Get Enum from DB
    }

    fun setType(scheme: MyEnum) {
        // Set Enum in DB
        _selectedType.value = scheme
    }

    companion object {
        private lateinit var instance: MySingeltonClass
        fun getInstance(): MySingeltonClass {
            if (!this::instance.isInitialized) {
                instance = MySingeltonClass()
            }
            return instance
        }

    }
}

enum class MyEnum {
    TYPEA, …
Run Code Online (Sandbox Code Playgroud)

kotlin swift kotlin-multiplatform swiftui

3
推荐指数
1
解决办法
948
查看次数

无法找到 kotlinx-atomicfu Compose 多平台 iOS

我正在尝试构建从 JetBrains 的存储库compose-multiplatform-ios-android-template克隆的项目。该代码在 Android 上运行良好,但在 iOS 上抛出错误。我也尝试过更新cocoapods。尽管如此,这还是会产生错误。现在,当我尝试在Android Studio上构建项目时,我的 logcat 上出现以下错误

java.lang.IllegalStateException: e: Could not find "../shared/build/kotlinTransformedMetadataLibraries/commonMain/org.jetbrains.kotlinx-atomicfu-0.17.3-nativeInterop-8G5yng.klib" in [/Users/rasel/Library/Application Support/kotlin/daemon]
    at org.jetbrains.kotlin.library.SingleFileResolveKt$resolveSingleFileKlib$1.fatal(SingleFileResolve.kt:21)
    at org.jetbrains.kotlin.library.KotlinLibrarySearchPathResolver.resolve(SearchPathResolver.kt:171)
    at org.jetbrains.kotlin.library.KotlinLibrarySearchPathResolver.resolve(SearchPathResolver.kt:176)
    at org.jetbrains.kotlin.library.CompilerSingleFileKlibResolveStrategy.resolve(SearchPathResolver.kt:298)
    at org.jetbrains.kotlin.library.SingleFileResolveKt.resolveSingleFileKlib(SingleFileResolve.kt:24)
    at org.jetbrains.kotlin.library.SingleFileResolveKt.resolveSingleFileKlib$default(SingleFileResolve.kt:15)
    at org.jetbrains.kotlin.cli.metadata.KlibMetadataDependencyContainer.<init>(K2MetadataKlibSerializer.kt:117)
    at org.jetbrains.kotlin.cli.metadata.K2MetadataKlibSerializer$serialize$analyzer$1.invoke(K2MetadataKlibSerializer.kt:49)
    at org.jetbrains.kotlin.cli.metadata.K2MetadataKlibSerializer$serialize$analyzer$1.invoke(K2MetadataKlibSerializer.kt:43)
    at org.jetbrains.kotlin.cli.metadata.CommonAnalysisKt.runCommonAnalysisForSerialization(CommonAnalysis.kt:42)
    at org.jetbrains.kotlin.cli.metadata.K2MetadataKlibSerializer.serialize(K2MetadataKlibSerializer.kt:48)
    at org.jetbrains.kotlin.cli.metadata.K2MetadataCompiler.doExecute(K2MetadataCompiler.kt:122)
    at org.jetbrains.kotlin.cli.metadata.K2MetadataCompiler.doExecute(K2MetadataCompiler.kt:40)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:100)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:46)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1486)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.base/java.lang.reflect.Method.invoke(Unknown Source)
    at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
    at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
    at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
    at java.base/java.security.AccessController.doPrivileged(Unknown …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-multiplatform compose-multiplatform

3
推荐指数
1
解决办法
838
查看次数

多平台项目中的Android上下文

我想知道是否可以使用kotlin-multiplatform插件访问androidMain sourceSets中的Android上下文应用程序。

这是build.gradle文件

apply plugin: 'kotlin-multiplatform'

kotlin {
    targets {
        final def iOSTarget = System.getenv('SDK_NAME')?.startsWith("iphoneos")   \
                                ? presets.iosArm64 : presets.iosX64

        fromPreset(iOSTarget, 'iOS') {
            compilations.main.outputKinds('FRAMEWORK')
        }

        fromPreset(presets.jvm, 'android')
    }

    sourceSets {

        commonMain {
            kotlin.srcDir('src')
            dependencies {
                implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
                // coroutine
                implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.1.0"
            }
        }

        androidMain {
            dependencies {
                implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
                // Timber
                implementation "com.jakewharton.timber:timber:$timber_version"
                // coroutine
                implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.0"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试将'com.android.application'插件添加到androidMain源中,但是同步失败。

提前致谢

android kotlin kotlin-multiplatform

2
推荐指数
1
解决办法
393
查看次数

android kotlin 多平台 kotlinx.serialization 适用于调试,但不适用于发布版本

我们正在使用 kotlin multiplatform 进行公司的下一个项目。一切正常,直到我尝试为 android 创建一个发布版本以进行 beta 测试。我在发布版本中遇到此错误,而在调试中一切正常。

[NetworkManager] unknown exception: l.a.w: Can't locate argument-less serializer for class a. For generic classes, such as lists, please provide serializer explicitly.
Run Code Online (Sandbox Code Playgroud)

这是项目级 build.gradle

buildscript {
ext.kotlin_version = '1.3.70'
ext.versions = [
        "ktor" : "1.3.2",
        "serialization" : "0.20.0",
        "coroutines" : "1.3.6",
]

repositories {
    maven { url 'https://maven.google.com' }
    maven { url 'https://dl.google.com/dl/android/maven2' }
    maven { url "https://s3-eu-west-1.amazonaws.com/elasticode-sdk/Android/maven/" }
    google()
    jcenter()

}
dependencies {
    classpath 'com.android.tools.build:gradle:3.6.3'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
    classpath 'com.google.firebase:firebase-crashlytics-gradle:2.2.0'
    classpath …
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-multiplatform kotlinx.serialization kotlinx

2
推荐指数
1
解决办法
1491
查看次数

IOS 上的 InvalidMutabilityException 使用 Kotlin Multiplatform 中的协程使用可变变量

我简化了错误,我只有这个类:

class TestClass{
    private var string = "Hello"

    fun testError() {
        string= "It Works"
        GlobalScope.launch(Dispatchers.Default) {
            string = "Doesn't work"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我在主线程(在 IOS 上)上启动 TestClass().testError(),它会抛出一个 InvalidMutabilityException(在 line --> string = "Doesn't work")。所以我认为在创建变量的线程之外的线程上更改变量可能不是一个好主意。所以我改成这样:

class TestClass{
    private var string = "Hello"

    fun testError() {
        string= "It Works"
        GlobalScope.launch(Dispatchers.Default) {
            withContext(Dispatchers.Main) { string = "Doesn't work" }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但它仍然抛出一个错误:

kotlin.native.concurrent.InvalidMutabilityException:冻结 com.example.project.TestClass@fe10a8 的突变尝试

顺便一提。上面的两个代码都适用于 Android 端

kotlin kotlin-native kotlin-multiplatform kotlin-coroutines

2
推荐指数
1
解决办法
434
查看次数

数据类中的默认参数未使用 ktor 序列化程序转换为 json

在 http 请求中将数据类序列化为 json 时,我遇到了一个奇怪的问题。

工作代码:

@Serializable
data class ComanyCustomerLoginData(
  val email: String,
  val credential: String,
  val companyUUID: String,
)
val customerLoginData = ComanyCustomerLoginData("trwla@gmail.com", "1234", "d80f0b72-a062-11eb-bcbc-0242ac130002")
val response = client.post<HttpResponse>(URL) {
   contentType(ContentType.Application.Json)
   body = customerLoginData
}
Run Code Online (Sandbox Code Playgroud)

非工作代码

@Serializable
data class ComanyCustomerLoginData(
  val email: String,
  val credential: String,
  val companyUUID: String = "d80f0b72-a062-11eb-bcbc-0242ac130002",
)
val customerLoginData = ComanyCustomerLoginData("trwla@gmail.com", "1234")
val response = client.post<HttpResponse>(URL) {
   contentType(ContentType.Application.Json)
   body = customerLoginData
}
Run Code Online (Sandbox Code Playgroud)

在非工作代码中,在数据类构造函数中有一个默认参数,但是当它被序列化时,我在该 json 中看不到 companyUUID,但工作代码创建了一个名为 companyUUID 的键。

你能指出是什么问题吗?

serialization kotlin ktor kotlin-multiplatform

2
推荐指数
1
解决办法
89
查看次数

kotlin MPP 与 Kotlin Native 不同吗?

我已经在线阅读了多个内容,但仍然无法理解 Kotlin 多平台移动版与 Kotlin Native 之间有明显区别吗?

kotlin kotlin-native kotlin-multiplatform

2
推荐指数
1
解决办法
70
查看次数