安卓:No static method decodeBase64,commen-code包里报错的信息

安卓:No static method decodeBase64

造成主要原因

1.导入的commons-codec的jar包与项目里的第三方sdk(比如微信和qq第三方登陆重复)
2.安卓framework里也含有此jar包,这是最主要原因,也是我项目中的报错原因

调用代码

X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKey));
我项目里还导入了commons-io的jar包用于与服务器进行密码的加解密,publickey是解密后获取的公钥,用于加密密码,关键报错的是这句代码中的Base64.decodeBase64(publickey)

错误

No static method decodeBase64(Ljava/lang/String;)[B 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)
没有这个静态方法,但是编译能过,不报错。真机运行就报错,原因上面已经说明了,安卓在framework里的httpclient里也有相同的包,而且不包括这个静态方法,而且这个版本相当古老,并且覆盖了自己导入的版本,所以报错。

解决方法

之前自己搜索的资料里基本是用安卓的Base64来代替解决问题,但是每个人写的项目业务逻辑是不同的,比如我项目中的加解密是不能用安卓的Base64来完成的,还有的解决方法是修改common-codec jar里包的包名和目录结构,这个过程比较繁琐但是可行,包名不一样谈何覆盖。下面我来提供一个最简单的方法。

报错方法是commons-codec里的Base64类中的decodeBase64方法,首先编译能通过这个类肯定是没问题的。将这个类直接copy到自己工程下,还有它的父类,为了区分可以改类名也可以不改,现在包的路径不一样了,不会被覆盖,自然也没有这个问题了,然后在把之前用的Base64替换为自己工程下的,所有问题都没有了。

### 回答1: base64.decode是一个用于将base64编码的数据解码为原始数据的函数。在计算机编程中,base64编码是一种将二进制数据转换为文本格式的方法,以便在网络上传输或存储。而base64.decode函数则是用于将这种编码后的数据解码回原始二进制格式,以便进行进一步处理或存储。 ### 回答2: base64.decodebase64是一个用于解码base64字符串的函数。base64是一种用于将二进制数据转换为文本字符串的编码方式,它将一个字节流转换为一组可打印字符。这种编码方式常用于通过文本协议传输二进制数据,或者将二进制数据存储在文本文件中。 decodebase64函数会将base64字符串解码为原始的二进制数据,并返回解码结果。解码过程包括解析base64字符串的每个字符,并将其转换为对应的6位二进制数值,然后将这些二进制数值合并为一个字节序列。 解码过程中,如果base64字符串的长度不是4的倍数,或者字符串中包含非法字符或填充字符,解码函数会抛出异常或返回错误。因此,在使用decodebase64函数时,需要确保输入的base64字符串是有效的。 解码后的二进制数据可以进一步处理,例如保存到文件中、与其他数据进行合并或运算等。在解码后,我们可以还原出原始的数据,从而进行后续的操作和处理。 总之,base64.decodebase64函数是一个用于解码base64字符串的函数,它将base64编码的字符串转换为原始的二进制数据,以便后续的处理和使用。 ### 回答3: base64是一种编码方式,它将二进制数据转换为可打印字符的字符串。而base64.decodebase64则是对经过base64编码的字符串进行解码,将其还原为原始的二进制数据。 在计算机领域中,二进制是一种用0和1表示数据的方式,而可打印字符是人类能够直接阅读的字符,例如字母、数字和符号。然而,这两种表示方式并不一致,无法直接进行转换。为了解决这个问题,就出现了base64编码。 base64编码将3个字节的二进制数据编码为4个可打印字符,这样就实现了二进制数据到可打印字符的转换。而base64.decodebase64则是对编码后的字符串进行解码,将4个可打印字符还原成3个字节的二进制数据。 解码的过程是通过将每个字符转换为对应的6位二进制数,再将4个6位二进制数合并为一个24位的二进制数,最后将24位二进制数转换为3个字节的二进制数据。这样就完成了base64编码到二进制数据的转换。 base64编码在很多场景中都有广泛的应用,特别是在网络传输中。因为网络传输的数据需要以文本形式进行传递,而二进制数据无法直接传输,所以需要将二进制数据进行base64编码后再传输。接收方则需要通过base64.decodebase64解码来还原原始的二进制数据。 总之,base64.decodebase64是将经过base64编码的字符串进行解码的过程,将其还原为原始的二进制数据。这是一种常用的编码解码方式,用于在二进制数据与可打印字符之间进行转换,特别在网络传输中起到重要作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值