如何在Java中拦截事件

时间:2018-09-11 19:34:41

标签: java events listener

我正在使用react native开发一个应用程序,我实现了一个模块,该模块将java事件发送给js,以便可以在react native中监听它。

有没有办法在另一个Java文件中侦听它?

这是示例事件:

            int score = 10;

            sendEvent("SCORE", score);

模块本身如下所示:

// Called to emit events to event listeners in JS
private void sendEvent(String eventName, int result) {
    getReactApplicationContext()
            .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
            .emit(eventName, result);

我可以在js中使用侦听器读取它,但是不知道如何在另一个Java文件中读取它。

1 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法可能是将结果和事件名称存储为java变量,然后可以从其他位置轻松访问它。

要做的第一件事是制作一个可以从另一个类(公共)中使用的java变量,并为其指定一个默认值,以避免出现任何问题。

//Create Java variables
public static int myValueResult = 0;
public static string myValueName = "";

// Called to emit events to event listeners in JS
private void sendEvent(String eventName, int result) {
getReactApplicationContext()
        //JS Method
        .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
        .emit(eventName, result);

        //Add an extra line that saves the result and eventName to the Java variables we made 
        myValueResult = result;
        myValueName = eventName;
}

现在,您可以从下面的另一个Java类获取结果。只需将classWithEvent替换为包含您的sendEvent方法的类的真实名称即可:

int resultFromOtherClass_result = classWithEvent.myValueResult;
string resultFromOtherClass_name = classWithEvent.myValueName;

编辑:该事件已在进行监听,因此无需在另一个Java类中进行监听。相反,您可以简单地在另一个类中调用一个方法,有点像这样,然后只要sendEvent发生,您就可以在该类中对其进行任何操作:

myOtherClass.doEvent(eventName, result);