Eu estou trabalhando em um aplicativo em reagir nativa e eu implementado um módulo que envia evento java para js para que ele possa ser ouvido em reagir nativa.
Existe alguma maneira de ouvir-lo em outro arquivo java?
Aqui está o exemplo de eventos:
int score = 10;
sendEvent("SCORE", score);
O módulo em si parece como abaixo:
// Called to emit events to event listeners in JS
private void sendEvent(String eventName, int result) {
getReactApplicationContext()
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, result);
Eu posso lê-lo com ouvinte em js, mas não tenho idéia como lê-lo em outro arquivo java.
A melhor maneira de fazer isso é provavelmente para armazenar o nome do resultado e do evento como uma variável java, então você pode facilmente aceder a partir de outro lugar.
A primeira coisa a fazer é fazer uma variável java que estará disponível a partir de outra classe (público) e dar-lhe um valor padrão para evitar quaisquer problemas.
//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;
}
Agora você pode obter o resultado de outra classe Java como abaixo. Basta substituir classWithEvent
com o nome real da classe que contém o sendEvent
método:
int resultFromOtherClass_result = classWithEvent.myValueResult;
string resultFromOtherClass_name = classWithEvent.myValueName;
Edit: Este evento já está fazendo a escuta, por isso não há necessidade de ouvir em outra classe java. Em vez disso, você pode simplesmente chamar um método em outra classe, um pouco como isso, então sempre que o sendEvent acontece, você pode fazer o que quiser com ele nessa classe:
myOtherClass.doEvent(eventName, result);