it-swarm-pt.tech

VFY: não é possível resolver o método virtual

Estou usando o Jackson no meu aplicativo para Android.

Eu adicionei esses dois jars no meu caminho de construção:

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

Mas continuo vendo isso no meu 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;

É apenas nesse método. Eu pesquisei StackOverflow em erros semelhantes, mas todos eles eram:

  • Versões erradas de bibliotecas (as minhas estão corretas)
  • Bibliotecas não em/libs mas em/lib (eu as tenho em/libs)

Minha versão do Android é 4.0.3. Eu estou usando isso em combinação com bibliotecas Spring Android.

14
tolgap

Eu tive um problema parecido; supondo que você esteja usando o Eclipse, tente o seguinte:

  1. Clique com o botão direito no seu projeto
  2. Vá para Build Path> Configure Build Path ...
  3. Clique na aba "Encomendar e exportar"
  4. Marque as caixas ao lado de seus frascos e clique em OK
  5. Limpe e construa seu projeto e veja se funciona.

Espero que isso funcione.

13
Erhannis

Isso também pode acontecer se você tiver métodos de chamada de código que não existam na versão atual do sistema operacional do dispositivo.

Por exemplo, se em algum lugar do seu aplicativo você chamar Settings.Global.getFloat(String) - que foi adicionado na api 17 - e o dispositivo atual estiver executando a API 15, você verá esse aviso nos seus logs.

Haverá uma falha se você realmente tentar invocar esse método. Não há problema se você não chamar esse método. Portanto, verifique sempre a versão atual antes de chamar isso.

    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

No meu caso, esta solução não pode funcionar.
Verifique se o formato de código do arquivo jar está ajustado como JDK 1.6,
Encontrei esse problema alterando meu formato de código de lib de 1.7 para 1.6, e esse problema seria resolvido.

  1. Para adicionar um jar externo no Eclipse para Android Project, podemos fazer assim:
    Propriedades do projeto -> Java Build Path -> Libraries, em seguida, adicione os arquivos Jar externo.
    Propriedades do projeto -> Java Build Path -> Order & Export, em seguida, verificou os arquivos Jar externo.
    Você pode limpar e reconstruir o projeto de destino para ver o tamanho do arquivo apk e testar essas funções no jar externo.

  2. Para adicionar um jar externo no Eclipse para Android Project, podemos fazer assim:
    Copie o arquivo jar para libs do projeto Android e pronto.

    Para o número 1, é fácil lidar com vários projetos para uma biblioteca.
    Para o número 2, é fácil de usar e não precisa de configuração.

    Isso é tudo.
1
Leo Chen