怎么在 Java 里调用 Kotlin 的 suspend 方法

查看 123|回复 11
作者:magic3584   
class AreaManager {
    companion object {
        @Volatile
        private var instance: AreaManager? = null
        @JvmStatic
        fun getInstance(): AreaManager {
            return instance ?: synchronized(this) {
                instance ?: AreaManager().also { instance = it }
            }
        }
    }
    suspend fun updateArea(context: Context): Boolean {
        val filePath = downloadFile(context)
        return when (filePath) {
            null -> false
            else -> true
        }
    }
}
我现在想在 fragment 的 java 代码里调用,应该怎么做?试了 Claude 、GPT 都没能实现,各种飘红。
android 也太难学了
[ol]
  • 不能像 iOS 和 flutter 一样,通过 IDE 快速的知道当前是哪个页面,只能根据页面上的文字去慢慢搜索
  • 方法是类似 setOnClickListener(this) 结果回调又是在 onClick ,无法通过点击方法来跟踪调用。类似的还有 onNext 等,再搭配 vm 、adapter 和 presenter ,绝了😂
    [/ol]
  • sagaxu   
    https://www.baeldung.com/kotlin/suspend-functions-from-java
    lisongeee   
    ```kt
    suspend fun updateArea(context: Context): Boolean {
        TODO()
    }
    fun syncUpdateArea(context: Context): Boolean {
        return runBlocking { updateArea(context) }
    }
    ```
    location123   
    如二楼 java 开一个线程 kt 中使用 runBlocking 调用 suspend 函数
    或者 kotlin 多写一个函数转成 callback
    GotKiCry   
    给 Kotlin 再封装一层给 Java 是你最好的选择
    iOCZS   
    swift 的 await 和 Task 熟悉了吗?
    magic3584
    OP
      
    感谢大佬们,可以了。
    搜索结果让我再自定义个 CustomContinuation ,然后再实现 resume 啥的方法,完全不知道在哪获取返回结果😂
    @iOCZS #5
    惭愧,近几年原生代码写的少很多,swift 5.几以后的 await async 没怎么用了,swiftUI 用了一下坑不少也没怎么实践。目前还是习惯用 delegate 和 block  来处理异步事件。
    yazinnnn0   
    做不到的, 只能在 kotlin 代码里处理成 Future 之类的东西,再扔给 java
    Achieve7   
    我刚开始学的时候也踩过这个坑, 只能转成 java 的线程处理类 future completed 之类的才行
    lmshl   
    1. asCompletableFuture
    https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.future/
    UI 代码里可以用, 非阻塞
    2. runBlocking
    https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/run-blocking.html
    非 UI 代码里可以用, 阻塞
    建议都用 Kotlin 写, 没啥必要 Java/Kotlin 混写
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部