2015-11-03 173 views
4

我導入後的下一步驟公地編解碼器1.10.jar:Android Studio中java.lang.NoSuchMethodError與導入庫

  1. 在德的應用程序目錄中創建手動複製的一個libs目錄
  2. 。 libs目錄內的罐子
  3. 右擊Android的工作室裏面的.jar和點擊添加爲庫

加入這一行我build.grade

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

在我的課堂我進口這樣的庫:

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

然後我試圖訪問encodeBase64String靜態方法中的Base64這樣的:

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環境中是新手。所以,任何幫助將不勝感激

+2

這可能會幫助你

+0

Omg謝謝。這似乎很有幫助。我會讓你知道我做了什麼 –

回答

7

android.util.Base64 

更換

org.apache.commons.codec.binary.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; 
} 
} 
0

嗯,只是告訴大家,我無法解決這個問題。我用的是原生的Android庫進行編碼和解碼這是在android.util.Base64

  String hash = Base64.encodeToString(hasheado.doFinal(json.getBytes()), Base64.DEFAULT); 
1

Android框架包括在classpath上的commons-codec庫的古老版本(1.3)。在運行時,它將使用它的類,而不是與應用程序一起打包的類。在1.4中引入了Base64#encodeBase64String方法,因此您收到了java.lang.NoSuchMethodError例外。

一個可能的解決方案是通過使用jarjar重新打包它來更改庫的名稱空間。

查看我的blogpost,更詳細地解釋了問題並顯示如何重新打包庫。