web-dev-qa-db-ja.com

VFY:仮想メソッドを解決できません

AndroidアプリでJacksonを使用しています。

ビルドパスに次の2つの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ライブラリと組み合わせて使用​​しています。

14
tolgap

私も同様の問題を抱えていました。 Eclipseを使用していると仮定して、以下を試してください。

  1. プロジェクトを右クリックします
  2. [ビルドパス]> [ビルドパスの構成...]に移動します。
  3. 「注文とエクスポート」タブをクリックします
  4. Jarファイルの横にあるチェックボックスをオンにして、[OK]をクリックします
  5. プロジェクトをクリーンアップしてビルドし、機能するかどうかを確認します。

うまくいけば、それはうまくいきます。

13
Erhannis

これは、現在のデバイスOSバージョンに存在しないメソッドを呼び出すコードがある場合にも発生する可能性があります。

たとえば、アプリのどこかで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);
    }
11
Pedro Loureiro

私の場合、このソリューションは機能しません。
jarファイルのコード形式がJDK1.6に適合していることを確認してください。
libコード形式を1.7から1.6に変更することでこの問題を発見しましたが、この問題は解決されます。

  1. Android ProjectのEclipseに外部jarを追加するには、次のようにします。
    。プロジェクトのプロパティ-> Javaビルドパス->ライブラリ)次に、それらの外部Jarファイルを追加します。
    。プロジェクトのプロパティ-> Javaビルドパス->注文とエクスポート-次にそれらの外部Jarファイルをチェックしました。
    ターゲットプロジェクトをクリーンアップして再ビルドし、apkファイルのサイズを確認して、外部jarでそれらの関数をテストできます。

  2. Android ProjectのEclipseに外部jarを追加するには、次のようにします。
    。 jarファイルをAndroidプロジェクトのライブラリにコピーし、完了しました。

    #1の場合、1つのライブラリのマルチプロジェクトを簡単に処理できます。
    #2の場合、使いやすく、構成は必要ありません。

    それで全部です。
1
Leo Chen