java.lang.NoSuchMethodError: No static method encodeBase64String([B)Ljava/lang/String问题解决

Android studio错误log: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)

 

我们的Android工程要使用A公司提供的技术文档,对一个字符串使用base64进行加密,然后把加密的字符串传给A公司的后台。他们给我们提供的有BASE64加密工具类DesEncrypter.java
和一个测试类WebApitest.java。根据它们提供的加密工具类DesEncrypter,我自行添加了commons-codec-1.10.jar和BASE64.jar这两个jar包,因为工具类中对字符串加密,用到了commons-codec-1.10.jar中的Base64.encodeBase64String(ecipher.doFinal(str.getBytes()))这个方法,对图片的解码,用到了BASE64.jar中的BASE64Decoder这个类及这个类的.decodeBuffer(String)方法。添加完这两个jar包,测试类运行正常,能正常加密,然后把代码添加到Android正式代码里,不报错。然后打包apk安装到手机,运行APP,到加密这一步,报错,错误如下:

这就奇怪了,明明有这个方法,而且测试类能正常运行,安卓代码也没报错,也能成功打包,怎么就报这个错呢?后来上网搜了,说是commons-codec-1.10.jar不是Android的标准APIs,要使用Android自身的base64类里的方法。但是Android自身的base64方法里没有A公司给我们提供的DesEncrypter.java的加密方法,所以放弃,还是用commons-codec-1.10.jar里的org.apache.commons.codec.binary.Base64,还是报上面那个错。后来上网查到要换成Android的base64类,导入android.util.Base64,然后把commons-codec-1.10.jar里的方法Base64.encodeBase64String(ecipher.doFinal(str.getBytes()))转换成android.util.Base64里的Base64.encodeToString(ecipher.doFinal(str.getBytes()),Base64.DEFAULT),就可以解决了。然后按这个方法去改,测试类WebApitest又一直报错,无法对字符串加密。找了很久的问题,就是找不到。后来实在没办法,给A公司打电话,才知道他们提供给我们的方法,是Java后台的方法,Android端用就是会出现那个问题。问题是,他们压根没告诉我那个是Java后台的方法,而且他们知道我们做的是安卓端。

修改前,测试类能用,安卓代码打包运行报错;修改后,测试类报错,因为一直以为都是Android端的代码,测试类报错,Android端肯定也报错,就没再试Android端代码。知道测试类是Java后台代码后,测试类报错就跟Android无关了,然后直接测试Android代码,通过,问题解决了。

/**
	 * 加密
	 * @param str 要加密的字符串
	 * @return
	 * @throws Exception
	 */
	public String encrypt(String str) throws Exception {
		 str = new String(str.getBytes(), "UTF-8");
//		return Base64.encodeBase64String(ecipher.doFinal(str.getBytes()));//后台的commons-codec-1.10.jar包里的方法
		return Base64.encodeToString(ecipher.doFinal(str.getBytes()),Base64.DEFAULT);//Android自身的BASE64方法
	}

第一步:把导入的

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

替换为

import android.util.Base64

 

第二步:把commons-codec-1.10.jar里的 encodeBase64String()方法,转换为Android自身的BASE64的encodeToString()。见下图:

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值