如何在java中拦截事件

如何在java中拦截事件,java,events,listener,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(

我正在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中的listener读取它,但不知道如何在另一个java文件中读取它。

最好的方法可能是将结果和事件名称存储为java变量,然后您可以从其他地方轻松访问它

要做的第一件事是创建一个java变量,该变量将从另一个类(public)中可用,并为其提供一个默认值以避免任何问题

//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);

为什么要投否决票?这清楚地回答了“我可以用js中的listener读取它,但不知道如何在另一个java文件中读取它”的问题否决票不是我的工作,因为你的方法非常有效,而且符合我的要求。非常感谢你!!!