Плагин React Native не получает события от собственного генератора событий в index.js, но работает в демонстрационном прAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Плагин React Native не получает события от собственного генератора событий в index.js, но работает в демонстрационном пр

Сообщение Anonymous »

Я работаю над плагином React Native со структурой проекта, которая включает тестовое приложение в каталоге demos для тестирования функций плагина.
Моя проблема возникает при попытке обработать событие, исходящее из родная сторона Android. Несмотря на настройку NativeEventEmitter в index.js моего плагина и добавление прослушивателя для собственного события, обратный вызов, связанный с событием, похоже, не запускается на стороне RN.
Ниже представлена ​​упрощенная версия реализации в index.js моего плагина:
Теперь в демонстрационном приложении в каталоге demos я способен успешно прослушивать и обрабатывать одно и то же событие:

Код: Выделить всё

const { myLibrary } = NativeModules;
const EventEmitter = new NativeEventEmitter(myLibrary);

useEffect(() => {
const validationSuccessListener = myLibConnector.onValidationResultSuccess(handleValidationSuccess);
const validationFailureListener = myLibConnector.onValidationResultFailure(handleValidationFailure);

// This works as expected when added directly in the demo app
const eventListener = EventEmitter.addListener(
'onValidationResultSuccess',
validationResult => {
console.log('>> Received onValidationResultSuccess Event');
console.log('validationResult', validationResult);
}
);

return () => {
validationSuccessListener();
validationFailureListener();
eventListener.remove();
};
}, []);

Код: Выделить всё

 // Initialization of the Listener
private final MappedValidationResultListener listener = new MappedValidationResultListener() {
@Override
public void onFailure(String result, Throwable error) {
handleError(EVENT_VALIDATION_FAILURE, result, error);
}

@Override
public void onResponse(Map response) {
WritableMap writableMap = RNUtil.toWritableMap(response);
handleSuccess(EVENT_VALIDATION_SUCCESS, writableMap);
}
};

//HELPER METHODS
private void handleSuccess(String eventName, WritableMap response){
sendEvent(reactContext,eventName, response);
}

private void handleError(String eventName, String result, Throwable error) {
WritableMap resMap = Arguments.createMap();
resMap.putString("result", result);
resMap.putMap("error", error != null ? errorToMap(error) : null);
sendEvent(reactContext,eventName, resMap.toString());
}

private void sendEvent(ReactContext reactContext, String eventName, Object params) {
if (reactContext.hasActiveReactInstance()) {  // Ensure the context is active
Log.d("ReactNativeJS", "Event: " + eventName + ", params: " + params.toString());
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
} else {
Log.d("ReactNativeJS", "Skipping event: " + eventName + " (CatalystInstance not active)");
}
}
Итак, прослушиватель в демонстрационном приложении работает отлично, но когда тот же код используется через index.js плагина, обратный вызов прослушивателя событий не запускается. Я уверен, что собственное событие генерируется правильно; однако похоже, что на стороне React Native внутри плагина есть некоторая неправильная конфигурация.
Кто-нибудь сталкивался с подобной проблемой или мог бы дать представление о том, что может пойти не так в настройке плагина? ? Буду очень признателен за любую помощь!
Я видел здесь что-то подобное, но не знаю, как это исправить со своей стороны.
Я пытался отлаживать как на родной стороне, так и на стороне JS, и регистрировать выходные данные, но эмиттер на стороне плагина вообще не вызывался, даже с самыми простыми данными, которые я отправлял обратно на сторону JS. Но в демо-приложении все работает хорошо

Подробнее здесь: https://stackoverflow.com/questions/790 ... index-js-b
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»