java - 如何在java中拦截事件
问题描述
我正在使用 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 文件中读取它。
解决方案
最好的方法可能是将结果和事件名称存储为 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);
推荐阅读
- python - 如何理解python的contextlib模块中的解释
- android - 在发布模式下崩溃,但如果可调试为真 - 不是......可能的问题是什么?
- php - Google sheet API - 重置自动编号的工作表名称
- machine-learning - 我们应该使用哪种预测模型来预测学生的大学列表
- android - 如何从布局中删除特定片段
- java - 将同步 httpURLConnection 转换为异步 HttpClient
- sql-server - 子查询返回超过 1 个值错误
- python - Python Pandas 不会从第一列开始
- php - 运行下载选项而不影响当前页面进程
- matlab - 计算移动点的 x 和 y 位置的变化