titanium module java进阶:在java代码的callback之后,如何把结果返回给titanium处理 ?
访问量: 2646
refer to: http://www.appcelerator.com/blog/2013/07/callbacks-in-appcelerator-titanium-modules/ (以及下面的链接)
我们知道,在js 中调用java 代码很简单:
// app.js
my_module = require('com.my.module');
my_module.say_hi("Jim");
// com.my.module.java:
@Kroll.method
public void say_hi(String name){
System.out.println("hi " + name);
}
但是,如果对应的Module 有个call back 函数,该怎么办呢? 比如单点登录, 触发之后, 需要等待用户进行操作,然后在java代码中定义 onComplete, onError, onCancel:
public void onComplete(Platform platform, int action, HashMapres) { if (action == Platform.ACTION_USER_INFOR) { Message msg = new Message(); msg.what = MSG_AUTH_COMPLETE; msg.obj = new Object[] {platform.getName(), res}; handler.sendMessage(msg); } } public void onError(Platform platform, int action, Throwable t) { if (action == Platform.ACTION_USER_INFOR) { handler.sendEmptyMessage(MSG_AUTH_ERROR); } t.printStackTrace(); }
我希望在上面的 onComplete() 方法中,再调用js 函数,比如:
function send_user_info_to_server(){
HTTP.post('http://myserver.com/interface/register_user', my_data)
if(this.responseText == 'success') {
Alloy.createController('index').getView().open();
}
}
我们期望的调用方式是:
my_module = require('com.my.module');
my_module.say_hi("Jim", function(e) {
// error handler
}, function(e){
// sunccess handler
});
KrollFunction: 在java 代码中调用 js
http://docs.appcelerator.com/module-apidoc/latest/android/org/appcelerator/kroll/KrollFunction.html 和: https://developer.appcelerator.com/question/129607/krollfunction
这个interface 的作用,就是允许java代码调用js. 两个主要方法: call (同步), callAsync (异步调用).