Back

titanium module java进阶:在java代码的callback之后,如何把结果返回给titanium处理 ?

发布时间: 2015-04-13 06:04:00

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, HashMap res) {
    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 (异步调用). 

Back