Ожидаемый динамический тип `double ', но имеет тип` null' (Создание аргументов для Timing.createTimer по индексу 1) - PullRequest
0 голосов
/ 31 мая 2018

Я получаю эту ошибку 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);
  }

Вещи, которые я пробовал:

  1. Попытка защиты от нулевого идентификатора перед вызовом Timing.createTimer, выполнив if (id == null || id = '') { return null }
  2. Попытка печати идентификатора, который был установлен перед Timing.createTimer, но это вызвало приложениеперестать отвечать, так как он срабатывает почти каждую секунду

Любая помощь будет высоко ценится.Заранее спасибо

PS: я читал о каждом посте, связанном с этой проблемой, не смог найти решение, которое применимо

1 Ответ

0 голосов
/ 07 августа 2018

Вы должны попробовать решения здесь (есть несколько разных, которые работали для разных пользователей): https://github.com/react-navigation/react-navigation/issues/2387

Выяснил, в чем заключалась моя проблема, но это чертовски странно.У меня был только правый значок шеврона, поэтому я применил преобразование поворота на 180 градусов для своей кнопки «назад». Когда я нажал на goBack, у меня была та же ошибка: TypeError: ожидаемый динамический тип 'double', но имел тип 'string '.. Если я уберу преобразование вращения, все работает, lol ... Довольно странно ..

...