在Android应用程序中使用commonc编解码器的NoSuchMethodError

时间:2011-02-28 21:29:49

标签: android eclipse base64 apache-commons-codec

我按照here指令在eclipse中为我的Android应用程序添加了来自apache.org(commons-codec-1.4.jar)的commons编解码器。代码中没有错误。但是当我运行应用程序并调用使用编解码器的函数时,应用程序停止并需要关闭。

在logCat中说:

Android Runtime:java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.encodeBase64String

代码行是:     String tmpStr = Base64.encodeBase64String(msg); // msg是一个byte []

该应用程序适用于最低SDK版本= 7(Android 2.1),因此我无法使用Android Base64

知道如何解决问题?

4 个答案:

答案 0 :(得分:8)

我无法让公共编解码器在2.1仿真器上运行。我最终放弃了自己,复制了以下代码:

Base64 encoder/decoder

它只有一百多行左右。

答案 1 :(得分:8)

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

另外,请注意,此问题与this post.

重复

答案 2 :(得分: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而不是org之后,应用程序就像魔术一样运行。我想在Android实现中,使用了org.apache.commons.codec.binary,它不允许你再次在你的代码中使用它。

答案 3 :(得分:0)

您遇到问题的原因是因为这些说明有误,但必须有不同版本的commons-codec或Base64类。

我的理解是你需要将你的jar文件放到项目根目录下的'libs'目录中,以确保它在最终的apk中自动结束。一旦你把它放在那里,右键单击jar文件,然后转到Build Path->添加到构建路径。应该在那里工作。