16

hereの指示に従って、Android アプリケーションの Eclipse に 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 は byte[]

アプリケーションは最小 SDK バージョン = 7 (Android 2.1) 用であるため、Android Base64を使用できません

どうすれば問題を解決できますか?

4

4 に答える 4

8

コモンズコーデックを2.1エミュレーターでも実行できませんでした。私は最終的にあきらめて、コードをコピーして自分で作成しました。

Base64エンコーダー/デコーダー

たった100行かそこらです。

于 2011-02-28T23:16:25.410 に答える
8

まったく同じ問題が発生しました。だから私はAndroidのソースコードを閲覧し始めました.Androidがorg.apache.commons.code.binaryの実装を持っているというドンの推測は正しいことがわかりました。彼はそれにアクセスする能力について間違っています、あなたはできますが、バージョン1.4や1.5ではなく、Apache Commonsのバージョン1.2です。あなたはアンドロイドソースであなた自身のために見ることができます.

また、この質問はこの投稿の複製です。

于 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 が発生しました。

ただし、名前空間を org ではなく com.apache.commons.codec.binary に変更した後、アプリは魔法のように動作します。Android の実装内では org.apache.commons.codec.binary が使用されていると思いますが、コードで再度使用することはできません。

于 2011-03-02T05:52:26.503 に答える
0

問題が発生している理由は、これらの手順が間違っているが、異なるバージョンのcommons(コーデックまたはBase64クラスが存在する必要がある)が存在する必要があるためです。

私の理解では、jarファイルをプロジェクトのルートにある「libs」ディレクトリに配置して、最終的なapk内で自動的に終了するようにする必要があります。そこに置いたら、jarファイルを右クリックし、[ビルドパス]->[ビルドパスに追加]に移動します。そこから動作するはずです。

于 2011-02-28T21:39:55.513 に答える