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 библиотеками.


person tolgap    schedule 24.11.2012    source источник
comment
Это древняя версия, и вам действительно следует использовать что-то более новое, например 2.1. Или, если вам нужна совместимость с 1.x, 1.9.   -  person StaxMan    schedule 26.11.2012
comment
Spring для Android совместим только с jackson 1.0.0, по крайней мере, из того, что я читал.   -  person tolgap    schedule 26.11.2012
comment
Я немного сомневаюсь в этом, поскольку сообщение об ошибке фактически предполагает, что библиотека (Android Spring) была скомпилирована для более поздней версии, и что в 1.0 отсутствует рассматриваемый метод. Так что, возможно, вы можете перепроверить, чтобы увидеть ожидаемую версию.   -  person StaxMan    schedule 27.11.2012


Ответы (3)


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

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

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

person Erhannis    schedule 03.01.2013
comment
Большое спасибо. Это сработало для меня. Но так как это просто предупреждение, могу ли я его игнорировать? - person Archie.bpgc; 08.02.2013
comment
Не уверен, что вы имеете в виду; Я думаю, что моя проблема была фатальной ошибкой, а не предупреждением. Если у вас предупреждение, и оно, похоже, ни на что не влияет, я думаю, все в порядке. - person Erhannis; 10.02.2013
comment
Спасибо! Это помогло мне. - person herbertD; 03.06.2013
comment
Кто-нибудь знает, как это сделать в Android Studio? - person yuval; 14.10.2015

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

Например, если где-то в вашем приложении вы вызываете 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);
    }
person Pedro Loureiro    schedule 18.11.2014

В моем случае это решение не работает.
Убедитесь, что формат кода файла jar подходит для JDK 1.6.
Я обнаружил эту проблему, изменив формат кода моей библиотеки с 1.7 на 1.6, и эта проблема будет решена.

  1. Чтобы добавить внешнюю банку в eclipse для проекта Android, мы можем сделать следующее:
    . Свойства проекта -> Путь сборки Java -> Библиотеки, затем добавьте этот внешний файл Jar.
    . Свойства проекта -> Путь сборки Java -> Порядок и экспорт, а затем проверили эти внешние файлы JAR.
    Вы можете очистить и пересобрать целевой проект, чтобы увидеть размер файла apk и протестировать эти функции во внешнем банке.
    >
  2. Чтобы добавить внешнюю банку в eclipse для проекта Android, мы можем сделать следующее:
    . скопируйте файл jar в библиотеки проекта Android и готово.

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

    Вот и все.
person Leo Chen    schedule 17.01.2014