簡體   English   中英

如何從 Android 向 Javascript 函數發送回調?

[英]How to send a callback from Android to Javascript function?

我正在嘗試從 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) 的實現

java 承諾與 javascript 承諾不同,它們之間唯一相關的是名稱。 您不能將承諾從 java 返回到 javascript,即使語法允許您將發送一個與 java 中的對象無關的序列化克隆對象 - 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
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM