Estoy trabajando en una aplicación en reacciono nativo y he implementado un módulo que envía eventos de Java a js para que pueda ser escuchado en reaccionar nativa.
¿Hay alguna manera de escuchar en otro archivo de java?
Aquí es el caso de ejemplo:
int score = 10;
sendEvent("SCORE", score);
El propio módulo se ve de la siguiente manera:
// Called to emit events to event listeners in JS
private void sendEvent(String eventName, int result) {
getReactApplicationContext()
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, result);
Puedo leerlo con oyente js, pero no tienen idea de cómo leerlo en otro archivo java.
La mejor manera de hacer esto es probablemente para almacenar el nombre del resultado y el evento como una variable de Java, a continuación, puede fácilmente acceder a él desde otro lugar.
Lo primero que debe hacer es hacer una variable de Java, que estará disponible a partir de otra clase (público) y darle un valor por defecto para evitar cualquier problema.
//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;
}
Ahora se puede obtener el resultado de otra clase de Java, como a continuación. Basta con sustituir classWithEvent
con el nombre verdadero de la clase que contiene el sendEvent
método:
int resultFromOtherClass_result = classWithEvent.myValueResult;
string resultFromOtherClass_name = classWithEvent.myValueName;
Editar: Este evento ya está haciendo la escucha, así que no hay necesidad de escuchar en otra clase de Java. En su lugar, sólo tiene que llamar a un método en otra clase, un poco como esto, entonces cada vez que el sendEvent ocurre que puede hacer lo que quiera con él en esa clase:
myOtherClass.doEvent(eventName, result);