2011-02-28 87 views
16

我指令here以下加入从apache.org(公地编解码器-1.4.jar)在eclipse公地编解码器用于我的Android应用程序。代码中没有错误。但是当我运行应用程序并调用使用编解码器的函数时,应用程序会停止并需要关闭。的NoSuchMethodError在Android应用程序使用的编解码器commonc

在logcat的说:

的Android运行时:java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeBase64String

的程序代码是: 字符串tmpStr = Base64.encodeBase64String (MSG); // MSG是一个字节[]

的应用为分钟SDK版本= 7(的Android 2.1),所以我不能使用Android Base64

任何知道如何才能解决问题呢?

+2

在分析之前logcat中的运行时错误说重复: INFO/dalvikvm(292):找不到方法org.apache.commons.codec.binary。 Base64.decodeBase64,从包中的方法引用 WARN/dalvikvm(292):VFY:无法解析静态方法299:Lorg/apache/commons/codec/binary/Base64 ;.decodeBase64(Ljava /郎/字符串;)[B – DVV 2011-02-28 22:13:52

+0

考虑此答案(使用maven):http://stackoverflow.com/a/26548748/1084488 – Matthias 2014-10-24 13:26:48

回答

0

你有一个问题,究其原因是因为这些指令是错误的,但必须有一个不同的版本公地编解码器或目前的Base64类。

我的理解是,你需要把你的jar文件到一个“库”目录在你的项目的根目录,以确保它最终的apk内自动结束。一旦你把它放在那里,右键点击jar文件,然后进入Build Path-> Add to build path。应该从那里工作。

+0

我把公共编解码器-1.4.jar到内部的一个lib文件夹我的应用程序文件夹。我提到了你提到的jar文件,但情况相同。它会运行,但是当应用程序调用正在使用编解码器的函数时,它会关闭。 logCat是一样的。 – DVV 2011-02-28 21:51:19

+1

lib或libs?它非常重要,它是'libs'。 – 2011-02-28 22:58:19

+1

对不起,我的文件夹名称是libs。但是是一样的。运行时错误之前的logcat具备以下条件: 12月3日至一日:47:47.781:INFO/dalvikvm(264):找不到方法org.apache.commons.codec.binary.Base64.encodeBase64String,从方法的dv引用.sample.and.msgtest.calc 12月3日至一日:47:47.781:WARN/dalvikvm(264):VFY:无法解决静态方法311:Lorg /阿帕奇/公地/编解码器/二进制/ Base64的; .encodeBase64String( [B)Ljava /郎/字符串; – DVV 2011-03-01 17:50:07

8

我不能让公地编解码器无论是在2.1模拟器上运行。我最终放弃了,做了我自己,从复制的代码:

Base64 encoder/decoder

这只是刚刚百过线左右。

+0

我决定去寻找Android.util.Base64的源代码。我将代码复制到名为Base64.java的新Java文件中。然后我将该文件添加到Android.util包下的项目中。我的应用程序工作正常。但我不认为这是最好的方法,当它在包含此类的Android API 8或更高版本上运行时,如何影响应用程序? – DVV 2011-03-01 19:39:49

4

我认为这与Android库中的名称冲突有关。

我复制的Base64的Java源代码到我的项目进入org.apache.commons.codec.binary的命名空间。该项目编译没有任何问题。然而,在Android模拟器运行时,我有同样的错误,java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeBase64String。

然而,当我改变了命名空间com.apache.commons.codec.binary而不是组织,应用程序运行像魔术。我猜在Android实现中,org.apache.commons.codec.binary被使用,它不允许你再次在你的代码中使用它。

7

我遇到了完全相同的问题。所以我开始浏览Android源代码,事实证明,Don猜测Android有org.apache.commons.code.binary的实现是正确的。他可以访问它的能力是错误​​的,但是它的1.2版本的Apache公共版本,不是1.4版本甚至1.5版本。 你可以在android source中看到自己。

另请注意,这个问题是this post.

+0

第一链接“源”被打破:X – 2014-07-08 17:09:11

+1

@MichelAyres更正 – zarthross 2014-07-09 19:01:39

+0

要添加,一个简单的解决方法就是重构公地包名。 – tstaylor7 2014-11-02 06:11:28

相关问题