titanium module java进阶:在java代码的callback之后,如何把结果返回给titanium处理 ?
访问量: 2636
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 (异步调用).