2011-02-28 86 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

相關問題