【问题标题】:How to send a callback from Android to Javascript function?如何从 Android 向 Javascript 函数发送回调?
【发布时间】:2021-10-01 16:15:38
【问题描述】:

我正在尝试从 JS 函数“refreshPagesWithIds”调用 Android 原生函数“refreshPages”,该函数将字符串数组传递给原生函数。

id: ["1","2"];
refreshPagesWithIds(id) {
  return Android.refreshPages(id);
}

Android原生函数“refreshPages”内部调用了一个方法“someFunction”,该方法以id数组为参数,刷新页面后返回一个Promise。

@JavascriptInterface
    public void refreshPages(String[] ids) {
        StorageModule.someFunction(ids, null);
    }

someFunction 看起来像:

@JvmStatic
    fun someFunction(pageIds: ReadableArray, promise: Promise? = null) {
        val storagePromise = StoragePromise(promise, storageModules.size)
        storageModules.forEach { module -> module.refreshPagesWithIds(pageIds, storagePromise) }
    }

当来自 refreshPages 函数(在本机中)的 Promise 被设置为 Javascript 时,我如何返回一个值? 我无法理解 public void refreshPages(String[] ids)

的实现

【问题讨论】:

    标签: javascript java android reactjs kotlin


    【解决方案1】:

    Java 承诺与 javascript 承诺不同,它们之间唯一相关的是名称。即使语法允许您发送一个与 java 中的对象无关的序列化克隆对象,您也不能从 java 返回一个 promise - java 中的对象可能已完成,但您不会在 javascript 中知道这一点.

    你可以在 javascript 中做这样的事情

    arePagesRefereshed: true
    id: ["1","2"];
    refreshPagesWithIds(id) {
      // this seems to be sitting in an object, so i am just assuming that this refers to the object, but you get the point
      this.arePagesRefereshed = false
      return Android.refreshPages(id);
    },
    markPagesAsRefereshed: () => {
      this.arePagesRefereshed = true
    
    }
    

    然后在 Java 中

    @JvmStatic
        fun someFunction(pageIds: ReadableArray, promise: Promise? = null) {
            val storagePromise = StoragePromise(promise, storageModules.size)
            storageModules.forEach { module -> module.refreshPagesWithIds(pageIds, storagePromise) }
        // after all promises are completed call markPagesAsRefereshed in javascript
        }
    

    【讨论】:

    • 当Android中的promise被解析时,我如何向JS发送值?
    • @AashnaNarula 使用该值调用 javascript 函数,例如调用 markPagesAsRefereshed(resolvedValue)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 2020-11-17
    相关资源
    最近更新 更多