Я получаю эту ошибку Expected dynamic type `double', but had type `null' (Constructing arguments for Timing.createTimer at index 1)
, когда я запускаю реактивный Android.Когда я попытался найти Timing.createTimer, я обнаружил, что он используется в 3 местах внутри node_modules/react-native/Libraries/Core/Timers/JSTimers.js
:
1
setTimeout: function(
func: Function,
duration: number,
...args?: any
): number {
if (__DEV__ && IS_ANDROID && duration > MAX_TIMER_DURATION_MS) {
console.warn(
ANDROID_LONG_TIMER_MESSAGE +
'\n' +
'(Saw setTimeout with duration ' +
duration +
'ms)',
);
}
const id = _allocateCallback(
() => func.apply(undefined, args),
'setTimeout',
);
Timing.createTimer(id, duration || 0, Date.now(), /* recurring */ false);
return id;
}
2
setInterval: function(
func: Function,
duration: number,
...args?: any
): number {
if (__DEV__ && IS_ANDROID && duration > MAX_TIMER_DURATION_MS) {
console.warn(
ANDROID_LONG_TIMER_MESSAGE +
'\n' +
'(Saw setInterval with duration ' +
duration +
'ms)',
);
}
const id = _allocateCallback(
() => func.apply(undefined, args),
'setInterval',
);
Timing.createTimer(id, duration || 0, Date.now(), /* recurring */ true);
return id;
}
3
requestAnimationFrame: function(func: Function) {
const id = _allocateCallback(func, 'requestAnimationFrame');
Timing.createTimer(id, 1, Date.now(), /* recurring */ false);
return id;
}
Метод вызова определен внутри JavaMethodWrapper.java
368 строки
@Override
public void invoke(JSInstance jsInstance, ReadableNativeArray parameters) {
....
try {
for (; i < mArgumentExtractors.length; i++) {
mArguments[i] = mArgumentExtractors[i].extractArgument(
jsInstance, parameters, jsArgumentsConsumed);
jsArgumentsConsumed += mArgumentExtractors[i].getJSArgumentsNeeded();
}
} catch (UnexpectedNativeTypeException e) {
throw new NativeArgumentsParseException(
e.getMessage() + " (constructing arguments for " + traceName + " at argument index " +
getAffectedRange(jsArgumentsConsumed, mArgumentExtractors[i].getJSArgumentsNeeded()) +
")",
e);
}
....
}
И он вызывается из JavaModuleWrapper.java
162
@DoNotStrip
public void invoke(int methodId, ReadableNativeArray parameters) {
if (mMethods == null || methodId >= mMethods.size()) {
return;
}
mMethods.get(methodId).invoke(mJSInstance, parameters);
}
Вещи, которые я пробовал:
- Попытка защиты от нулевого идентификатора перед вызовом Timing.createTimer, выполнив
if (id == null || id = '') { return null }
- Попытка печати идентификатора, который был установлен перед Timing.createTimer, но это вызвало приложениеперестать отвечать, так как он срабатывает почти каждую секунду
Любая помощь будет высоко ценится.Заранее спасибо
PS: я читал о каждом посте, связанном с этой проблемой, не смог найти решение, которое применимо