10

次の手順に従って commons-codec-1.10.jar をインポートしました。

  1. de app ディレクトリの下に libs ディレクトリを作成しました
  2. libs ディレクトリ内の .jar を手動でコピーしました
  3. android-studio 内の .jar を右クリックし、[ライブラリとして追加] をクリックします。

私のbuild.gradeにこの行を追加しました

compile fileTree(dir: 'libs', include: ['*.jar'])

私のクラスでは、次のようにライブラリをインポートしました。

import org.apache.commons.codec.binary.Base64;

次に、次のようにBase64内のencodeBase64String静的メソッドにアクセスしようとしました:

public static class DoThisThing {
    public String DoThisOtherThing() {
        String hashed = "hello";
        String hash = Base64.encodeBase64String(hashed.getBytes());
        return hash;
    }
}

public class ActivityThing extends AppCompatActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_activity_thing);
        String hash = DoThisThing.DoThisOtherThing();
        System.out.println(hash);
    }
}

アプリを実行するときを除いて、コンパイルしても問題はありません。次のエラーがスローされ、アプリがシャットダウンします。

11-03 09:41:27.719 2390-2476/com.myproject E/AndroidRuntime:  Caused by: java.lang.NoSuchMethodError: No static method encodeBase64String([B)Ljava/lang/String; in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/org.apache.http.legacy.boot.jar)

ちなみに、私の DoThisThing クラスはアクティビティ内にはありません。短くするためです。ライブラリを確認しましたが、encodeBase64String は静的です。だから私は何をすべきか正確にはわかりません。私は Java と Android 環境が初めてです。だからどんな助けでも大歓迎です

4

3 に答える 3

13

交換

org.apache.commons.codec.binary.Base64 

為に

android.util.Base64

そして、このようにメソッドを更新します。

public static class DoThisThing {
 public String DoThisOtherThing() {
    String hashed = "hello";
    byte[] data = hashed.getBytes("UTF-8");
    String hash = Base64.encodeToString(data, Base64.DEFAULT);
    return hash;
 }
}
于 2015-11-11T21:02:06.637 に答える
5

Android フレームワークには、クラスパスに commons-codec ライブラリの古いバージョン (1.3) が含まれています。実行時には、アプリにパッケージ化されたクラスではなく、そのクラスが使用されます。Base64#encodeBase64Stringメソッドは 1.4 で導入されたため、java.lang.NoSuchMethodError例外が発生しています。

考えられる解決策の 1 つは、 jarjarを使用して再パッケージ化することにより、ライブラリの名前空間を変更することです。

この問題について詳しく説明し、ライブラリを再パッケージ化する方法を示している私のブログ投稿を参照してください。

于 2015-12-26T17:41:20.657 に答える
2

みんなに言っておきますが、私はこの問題を解決できませんでした。android.util.Base64 にあるネイティブ Android ライブラリを使用してエンコードとデコードを行いました

            String hash = Base64.encodeToString(hasheado.doFinal(json.getBytes()), Base64.DEFAULT);
于 2015-11-11T20:46:52.493 に答える