Подтвердить что ты не робот

VFY: невозможно разрешить виртуальный метод

Я использую Джексона в своем приложении для Android.

Я добавил эти два баночки в мой путь сборки:

jackson-core-asl-1.0.0.jar
jackson-mapper-asl-1.0.0.jar

Но я продолжаю видеть это в своем Logcat:

11-24 18:25:15.093: I/dalvikvm(28842): Could not find method org.codehaus.jackson.map.ObjectMapper.getTypeFactory, referenced from method org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.getJavaType
11-24 18:25:15.093: W/dalvikvm(28842): VFY: unable to resolve virtual method 17967: Lorg/codehaus/jackson/map/ObjectMapper;.getTypeFactory ()Lorg/codehaus/jackson/map/type/TypeFactory;

Это только по этому методу. Я искал StackOverflow при подобных ошибках, но все они были:

  • Библиотеки неправильных версий (мои правильные)
  • Библиотеки не в /libs, а в /lib (я их в /libs )

Моя версия Android 4.0.3. Я использую это в комбинации с библиотеками Spring Android.

4b9b3361

Ответ 1

У меня была аналогичная проблема; если вы используете Eclipse, попробуйте следующее:

  • Щелкните правой кнопкой мыши на своем проекте
  • Перейдите к пути сборки > Настроить путь сборки...
  • Перейдите на вкладку "Заказ и экспорт".
  • Установите флажки рядом с банками, затем нажмите "ОК"
  • Очистите и создайте проект, а затем посмотрите, работает ли он.

Надеюсь, это сработает.

Ответ 2

Это также может произойти, если у вас есть методы вызова кода, которые не существуют в текущей версии ОС устройства.

Например, если где-то в вашем приложении вы вызываете Settings.Global.getFloat(String) - который был добавлен в api 17 - и текущее устройство работает с api 15, вы увидите это предупреждение в своих журналах.

При попытке вызвать этот метод произойдет сбой. Нет проблем, если вы не вызываете этот метод. Поэтому перед тем, как позвонить, убедитесь, что вы всегда проверяете текущую версию.

    private float getAnimationSetting(ContentResolver contentResolver,
                                      String setting) throws Settings.SettingNotFoundException {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            return getAnimationSettingJB(contentResolver, setting);
        } else {
            return getAnimationSettingLegacy(contentResolver, setting);
        }
    }

    private float getAnimationSettingLegacy(ContentResolver contentResolver,
                                            String setting) throws Settings.SettingNotFoundException {
        return Settings.System.getFloat(contentResolver, setting);
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    private float getAnimationSettingJB(ContentResolver contentResolver,
                                        String setting) throws Settings.SettingNotFoundException {
        return Settings.Global.getFloat(contentResolver, setting);
    }

Ответ 3

В моем случае это решение не может работать.

Проверьте формат кода файла jar в соответствии с JDK 1.6,
Я нашел эту проблему, изменив формат моего кода lib с 1,7 до 1,6, и эта проблема будет решена.

  • Чтобы добавить внешнюю банку в eclipse для Android Project, мы можем сделать следующее:
    , Свойства проекта → Путь сборки Java → Библиотеки затем добавят этот внешний файл Jar.
    , Свойства проекта → Путь сборки Java → Заказ и экспорт, а затем проверили файл External Jar.
    Вы можете очистить и перестроить целевой проект, чтобы увидеть размер файла apk и проверить эти функции во внешней банке.

  • Чтобы добавить внешнюю банку в eclipse для Android Project, мы можем сделать следующее:
    , скопируйте файл jar в libs проекта android и выполните.



    Для # 1 легко обрабатывать мультипроекты для одной библиотеки.
    Для # 2 он прост в использовании и не требуется настройка.


    Это все.