【问题标题】:Android: MobileFirst sending data from Native to cross pageAndroid:MobileFirst 将数据从 Native 发送到跨页面
【发布时间】:2015-07-10 02:37:43
【问题描述】:
我的任务如下:使用 IBM MobileFirst 创建一个 Hybrid 应用程序并实现一个 JS 计算器。显示从本地 Java API 检索到的日期到网页。
我的尝试:
- 我按照文档here 实现了整个Native 代码的onCreate 方法
-
我发现this 回答“第一个”说明我应该在 onInitWebFrameworkComplete 上使用它,
- 提供的解决方案无效
- 我正在使用 MobileFirst 版本 7
- 完整的示例代码是provided
建议:我应该在本机代码中创建整个操作栏,然后将其合并到交叉 ui 中,可以吗?我只需要发送一小串日期
【问题讨论】:
标签:
android
ibm-mobilefirst
jsonobject
【解决方案1】:
我不清楚你的尝试,所以这里快速演示如何单击 HTML 中的按钮并触发 Send Action API 以获取 Java 中的当前日期并将其返回给 JavaScript,然后显示。
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));
}
}
主 Java 类文件
- 查找
onInitWebFrameworkComplete
-
在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 类
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);
}
}
}