[英]How to send string in web view or javascript function from android?
[英]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.