Android使用commons-codec问题

2015-02-02 17:47:00
zengde
原创 543


在Android使用commons-codec-1.7时报


02-02 09:10:16.439: E/AndroidRuntime(2010): FATAL EXCEPTION: main
02-02 09:10:16.439: E/AndroidRuntime(2010): java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Hex.encodeHexString
02-02 09:10:16.439: E/AndroidRuntime(2010): 	at org.apache.commons.codec.digest.DigestUtils.md5Hex(DigestUtils.java:339)
02-02 09:10:16.439: E/AndroidRuntime(2010): 	at com.commons.android.utils.MiscUtil.getMD5String(MiscUtil.java:84)
02-02 09:10:16.439: E/AndroidRuntime(2010): 	at com.commons.android.utils.MiscUtil.shortUrl(MiscUtil.java:95)
查看源码中明明有这个方法


原因:Google Android内部也有一个包名一样的工程,而且类名也相同,关键一点是只有encodeHex().没有encodeHexString(),该方法!于是导致包名冲突,大家都知道java的调用机制,我就不多说了,然后系统就在自己的里面找到了同样名字的这个类,然后去调用系统自己该类下面我们用的那个方法。然而系统根本就没有那个方法,于是呼...我们的这个可用的方法就歇菜了。根本就没被调用到。


解决办法


String str=DigestUtils.md5Hex(value);

替换为

String str=new String(Hex.encodeHex(DigestUtils.md5(value)));

如果是shaHex,改成

String hash = new String(Hex.encodeHex(DigestUtils.sha("textToHash")));

博客分类