我正在使用外部jar文件并尝试使其适用于本机模块,以便本机模块可以与钛一起使用
我无法从处理程序中触发事件
我在本机模块中有两个类 clsModule和Handler
import ext.Extclient;
@Kroll.module(name="extclient", id="ti.extclient")
public class clsModule extends KrollModule{
private Handler h ;
Extclient ext ;
public clsModule()
{
super();
ext = new Extclient();
h = new Handler(this);
im.addHandler(h);
}
}
import ext.ResponseHandler;
public class Handler implements ResponseHandler
{
public void OnConnected(String arg0, String arg1) {
HashMap<String, Object> event = new HashMap<String, Object>();
event.put("u1", arg0);
event.put("u2", arg1);
//How do i fire a event here ?
}
}
我尝试使用fireEvent,但是没有用,它会给出一个未定义的错误。
答案 0 :(得分:1)
您的模块(与所有模块一样)扩展KrollModule,扩展KrollProxy,用于处理事件。您的Handler类无权访问此对象,因此它无法触发事件本身,但是您已经传递了该引用(new Handler(this)
),所以只需使用它!
import ext.ResponseHandler;
public class Handler implements ResponseHandler {
private KrollModule proxy; // Hold onto this reference
public Handler(KrollModule proxy) {
this.proxy = proxy;
}
public void OnConnected(String arg0, String arg1) {
// Fire event if anyone is listening
if (proxy.hasListeners("colorChange")) {
HashMap<String, Object> event = new HashMap<String, Object>();
event.put("u1", arg0);
event.put("u2", arg1);
proxy.fireEvent("colorChange", hm);
}
}
}
这是一般的想法,通过代理将事件激发到类本身,另一种方法是在模块内部内联ResponseHandler
的匿名实现。我不确定你是否正确实施ResponseHandler,或者如果OnConnected
甚至被解雇,你需要先检查它。