如何跨android和JS桥配置通用数据模型?

时间:2019-06-10 06:27:16

标签: javascript android angularjs typescript web

我在Android中有一个JS桥,

public class WebInterface {
    Context mContext;
    public WebInterface(Context c) { this.mContext = c;}

    @JavascriptInterface
    public void showAlert() {
         Toast.makeText(mContext, "This is being called from the interface", Toast.LENGTH_SHORT).show();
    }
}

我可以在自己的webView中设置界面,

mWebView.addJavascriptInterface(WebInterface(this), "android"); 

这对于诸如showAlert()之类的简单方法很好用,当params或param是一个简单的字符串,但当我需要从Web应用程序调用本机函数时将数据模型作为params传递时,其中没有params我可以绑定数据模型吗?我需要使用自定义数据模型类型的参数调用实现函数。

public class WebInterface {
    Context mContext;
    public WebInterface(Context c) { this.mContext = c;}

    @JavascriptInterface
    public void showAlert() {
       Toast.makeText(mContext, "This is being called from the interface", Toast.LENGTH_SHORT).show();

    public void saveData(data: DataModel) { // DataModel is custom model
       Toast.makeText(mContext, "Saving data model", Toast.LENGTH_SHORT).show();
    }
}

如何在本机和Web应用程序之间绑定数据模型。是否可以使用TypeScript?如果可以,该如何配置?只能将纯json字符串用作参数吗?没有其他办法吗?

2 个答案:

答案 0 :(得分:1)

您应该使用JSON字符串。 您可以创建另一个函数,以接收所需的格式,然后在传递给函数之前先对对象进行JSON.stringify。

JavaScript

function saveData(obj){
  const json = JSON.stringify(obj);
  Android.saveData(json);
}

答案 1 :(得分:0)

替代方法用于JSON.parse(data)

javascript

function loadJson(obj) {
  var jsonValue = JSON.parse(obj)
  Android.saveData(jsonValue)
}