VFY:无法解析虚方法

时间:2012-11-24 17:28:30

标签: android jackson dalvik

我在我的Android应用程序中使用Jackson。

我在构建路径中添加了这两个jar:

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库结合使用。

3 个答案:

答案 0 :(得分:13)

我有类似的问题;假设您正在使用Eclipse,请尝试以下操作:

  1. 右键点击您的项目
  2. 转到构建路径>配置构建路径...
  3. 点击“订购和导出”标签
  4. 选中罐子旁边的复选框,然后点击确定
  5. 清理并构建项目,然后查看它是否有效。
  6. 希望这有效。

答案 1 :(得分:11)

如果您拥有当前设备操作系统版本中不存在的代码调用方法,也会发生这种情况。

例如,如果您应用中的某个地方调用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);
    }

答案 2 :(得分:1)

在我的情况下,此解决方案无法正常工作。
检查jar文件的代码格式是否适合JDK 1.6,
我通过将我的lib代码格式从1.7更改为1.6来找到此问题,这个问题将得到解决。

  1. 要在Android项目的eclipse上添加外部jar,我们可以这样做:
    。项目属性 - > Java构建路径 - >然后,库将添加那些外部Jar文件 。项目属性 - > Java构建路径 - >订单&导出然后检查那些外部Jar文件 你可以清洁&重新构建目标项目以查看apk文件大小并在外部jar中测试这些函数
  2. 要在Android项目的eclipse上添加外部jar,我们可以这样做:
    。将jar文件复制到android项目的libs,并完成。

    对于#1,可以轻松处理一个库的多项目 对于#2,它易于使用,无需配置
    这就是全部。