Android 使用fastjson找不到fastjson包问题的解决方法
来源:互联网 发布:淘宝店铺出租价格 编辑:程序博客网 时间:2024/06/05 13:23
转载于该blog https://segmentfault.com/a/1190000000380461
JSON解析库有很多,诸如Jackson,Json-lib,org.json,Gson和fastjson等,但是fastjson以其解析速度最快而脱颖而出。详细的测试地址如下:
https://github.com/eishay/jvm-serializers/wiki/Staging-Results
fastjson是国内alibaba公司的wenshao开发的,项目Git地址:
https://github.com/alibaba/fastjson
今天测试了下发现fastjson挺好用,比Android自带的org.json库要好用多了。当然我没有对fastjson的性能进行测试,只是因为Android自带的不太好。
在普通的java项目下,只需要导入fastjson.jar就可以,无需依赖其他包,这一点相比json-lib要好多,json-lib依赖五六个包。但是将fastjson.jar导入Android工程后,在使用时会出现 java.lang.NoClassDefFoundError:can't find com.alibaba.fastjson.JSON等错误消息。
初步认为是与Android自带的org.json冲突。于是Build Path->Configure Build Path->Order And Export下将fastjson.jar上调至Android xx.jar上(xx为android 版本号)。再运行工程,这个错误不再出现了,奇迹般的没问题了。
然后现在再调整fastjson.jar和Android.jar顺序也不会出现can't not find com.alibaba.fastjson的错误,不知道为何,继续看。
文章Java虚拟机类加载顺序讲解了java 虚拟机加载class和jar包的顺序。
bootstrap classloader ->extension classloader->system classloader
其中bootstrap引导类加载器;
extension classloader扩展类加载器,它负责加载JRE的扩展目录(JAVA_HOME/jre/lib/ext或者由java.ext.dirs系统属性指定的)中JAR的类包;
system classloader系统(也称为应用)类加载器,它负责在JVM被启动时,加载来自在命令java中的-classpath或者java.class.path系统属性或者 CLASSPATH操作系统属性所指定的JAR类包和类路径.
该文中还有一句话是这么说的,应该能解决我们的疑惑:
“此外类加载还采用了cache机制,也就是如果 cache中保存了这个Class就直接返回它,如果没有才从文件中读取和转换成Class,并存入cache,这就是为什么我们修改了Class但是必须重新启动JVM才能生效的原因。”
我想应该是Android虚拟机中已经有了fastjson的cache了,所以导致如何更改项目的fastjson.jar和Android.jar顺序都不会有任何反应。我的理解是这样,不知道对不对,欢迎大侠指正。
解释到这里,也解决了我另外一个疑问,就是在Android的工程中新建一个java类,并生成main方法,然后Run->Java Application. 结果会出现如下的错误:
## A fatal error has been detected by the Java Runtime Environment:## Internal Error (classFileParser.cpp:3494), pid=5940, tid=5632# Error: ShouldNotReachHere()
这个问题的产生就是和bootstrap classloard 有关了,文件上右键Run As->Run Configuration选择Java Application下的这个Java类,然后选择右侧的Classpath标签页下有两个目录,分别是Bootstrap Entries 和 User Entries。
Android工程中Bootsrap下默认的是Android Classpath Container,而Java则应该是JRE System Library。所以按照该文Error: ShouldNotReachHere()的解决方法,更改就好了。
- Android 使用fastjson找不到fastjson包问题的解决方法
- Android 使用fastjson找不到fastjson包问题的解决方法
- android FastJson的使用
- FastJson-fastjson的简单使用
- 使用fastjson遇到的问题
- fastjson使用遇到的问题
- 关于Android studio 使用fastjson报错的解决方法
- android fastjson的简单使用
- Json解析包 阿里巴巴 FastJson 的使用
- Java的Json解析包FastJson使用
- android 使用fastjson解析
- Android使用FastJson
- Android 第三方Jar包FastJson 代码混淆时的解决方法
- Android 第三方Jar包FastJson 代码混淆时的解决方法
- fastjson 使用时遇到的问题
- fastJson使用过程中出现的问题
- 使用fastjson遇到的一点问题
- Android FastJson使用的四种方式
- Swift AFNetworking 使用实例
- BOX2D 自然的旋转到一个指定角度
- 由C++的泛型句柄类思考OpenCV的Ptr模板类
- Java泛型
- 正则表达式
- Android 使用fastjson找不到fastjson包问题的解决方法
- SDWebImage下载图片
- java多线程采集+线程同步
- BOX2D 自然的旋转到一个指定角度
- 重新加载tableView指定section的数据
- 带坑水题--第六届省赛A
- 读写Excel -- ExcelToolUtil
- 【Spring学习】IoC与DI
- 《Linux4.0设备驱动开发详解》笔记--第七章:Linux设备中的并发控制