javascript - 使用对象参数将 javascript 代码绑定到 android 代码
问题描述
正如标题所示,我正在尝试将 javascript 代码绑定到我的 android 应用程序,以便我可以在我的应用程序中对我的网站发送的事件/消息做出反应。
在阅读了与 javascript 绑定相关的官方android 文档后,我设法轻松地实现了它。只要它是一个字符串。
什么工作正常?我在我的应用程序中实现了以下代码:
/** Instantiate the interface and set the context */
class ClientInterface(private val mContext: Context) {
/** Show a toast from the web page */
@JavascriptInterface
fun postMessage(message: String) {
Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show()
}
}
如果“postMessage”函数的参数是一个字符串,并且我从我的 javascript 中传递一个字符串作为参数,那么一切都很好。它正在传递字符串。我的问题是我正在尝试获取 JSONObject 而不是 String,但它不起作用。我尝试铸造所有我认为可能有效的东西.. JSONObject / JSONObject?/ 任何 / 任何?/对象/对象?等等..
当我在我的 javascript 上发送一个对象时,似乎没有任何效果。我在我的应用程序中得到的只是一个空响应。
有人尝试过这样的事情吗?我错过了什么?
PS - 这是我的 javascript 代码供参考:
var objectMessage = {
type: "quote",
code: "My name is Inigo Montoya. You killed my father, prepare to die!"
}
window.CLIENT.postMessage(objectMessage);
解决方案
你不能只传递一个原始对象!所以你需要对你的对象进行字符串化。
var objectMessage = {
type: "quote",
code: "My name is Inigo Montoya. You killed my father, prepare to die!"
}
window.CLIENT.postMessage(JSON.stringify(objectMessage));
推荐阅读
- ios - 从另一个文件中的 SKScene 中删除 UIView
- internet-explorer - Microsoft Edge 在 IE 中打开 login.onmicrosoft.com 而不是访问页面
- elmah - 可以在 VSTS 版本中转换 ELMAH 主题吗?
- java - Vector not changing with "AES/CBC/pkcs7padding" in Java
- oracle - 为其他用户创建 FK 时 Oracle 表或视图不存在
- r - 如何在 ggplotly() 中使分组热图的列宽相同
- ios - 使用 AWS Comprehend iOS 的问题
- sql - 是否可以从单个字符创建一个字符串?
- python - 散点图 - 时间序列中 dx (dt) 的偏移点
- azure - Azure 流分析作业的同一输出中是否可以有多个查询?