16

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

在 logCat 中说:

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

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

该应用程序适用于最低 SDK 版本 = 7 (Android 2.1),所以我不能使用Android Base64

知道如何解决这个问题吗?

4

4 回答 4

8

我也无法让公共编解码器在 2.1 模拟器上运行。我最终放弃了,自己做了,从以下位置复制代码:

Base64 编码器/解码器

它只有一百多行左右。

于 2011-02-28T23:16:25.410 回答
8

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

另请注意,这个问题是这篇文章的副本。

于 2011-05-05T18:07:02.643 回答
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 并且它不允许您再次在代码中使用它。

于 2011-03-02T05:52:26.503 回答
0

The reason you are having an issue is because those instructions are wrong but there must be a different version of the commons-codec or Base64 class present.

My understanding is that you need to put your jar file into a 'libs' directory at the root of your project to ensure it ends up automatically inside the final apk. Once you put it there, right click the jar file and then go to Build Path-> Add to build path. Should work from there.

于 2011-02-28T21:39:55.513 回答