Android: MobileFirst 从 Native 发送数据到跨页

Android: MobileFirst sending data from Native to cross page

我的任务如下:使用 IBM MobileFirst 创建一个混合应用程序并实现一个 JS 计算器。显示从本机 java API 检索到网页的日期。

我的尝试:

  1. 我遵循了文档 here 并实现了整个本机代码 onCreate 方法
  2. 我发现 this 答案"the first one" 说明我应该在 onInitWebFrameworkComplete 上使用它,

    • 提供的解决方案无效
    • 我正在使用 MobileFirst 版本 7
    • 完整的示例代码是 provided

建议:我应该用本机代码创建整个操作栏,然后将其合并到交叉 ui 中吗?我只需要发送一小串日期

我不清楚你的尝试,所以这里有一个快速演示如何单击 HTML 中的按钮并触发发送操作 API 以获取 Java 中的当前日期] 和 return 它到 Java 脚本,然后显示它。

index.html

<button onclick="getDateFromJava();">show current date from Java</button>

main.js

function wlCommonInit(){
    WL.App.addActionReceiver ("returneDdateFromJava", returnedDateFromJava);
}

function getDateFromJava() {
    WL.App.sendActionToNative("retrieveDate");
}

function returnedDateFromJava(received){
    if (received.action === "returnedDateFromJava"){ 
        alert (JSON.stringify(received));
    }
}

主要Javaclass文件

  1. 查找onInitWebFrameworkComplete
  2. else后加一个ActionReceiver:

    import com.worklight.androidgap.api.WLActionReceiver;
    ...
    ...
    
    public void onInitWebFrameworkComplete(WLInitWebFrameworkResult result){
        if (result.getStatusCode() == WLInitWebFrameworkResult.SUCCESS) {
            super.loadUrl(WL.getInstance().getMainHtmlFilePath());
        } else {
            handleWebFrameworkInitFailure(result);
        }
    
        ActionReceiver ActionReceiver = new ActionReceiver();
        WL.getInstance().addActionReceiver(ActionReceiver);
    }
    

ActionReceiver class

package com.getDateApp;

import java.util.Date;
import org.json.JSONException;
import org.json.JSONObject;
import com.worklight.androidgap.api.WL;
import com.worklight.androidgap.api.WLActionReceiver;

public class ActionReceiver implements WLActionReceiver{
    public void onActionReceived(String action, JSONObject data){
        if (action.equals("retrieveDate")){
            Date date = new Date();

            JSONObject returnedDate = new JSONObject();
            try {
                returnedDate.put("dateFromJava", date);
            } catch (JSONException e) {
                e.printStackTrace();
            }
            WL.getInstance().sendActionToJS("returnedDateFromJava", returnedDate);
        }
    }
}