leavesC 2019-06-29
1.gson-plugin告别Json数据类型不一致(一)
2.gson-plugin基础源码分析(二)
3.gson-plugin深入源码分析(三)
4.gson-plugin如何在JitPack发布(四)
看完这4篇文章,对Gson解析会有更加深刻的认识,对Android的编译流程会有更加深刻的认识,写Android Plugin插件不在话下,修改Java字节码小意思,发布一个开源项目so easy!
项目地址:github-gson-plugin
强化Android-Json解析的插件,解决Android-Json解析数据类型转换异常,不影响对Gson库的使用
1.Android主要开发语言是Java,属于强数据类型语言,不少公司后台开发采用的是PHP,属于弱数据类型的语言。
2.客户端与服务器在进行数据传输的过程中,常常因为某个字段数据类型不一致,导致客户端gson解析失败,从而导致整个页面的数据均无法展示。
1.当某个字段解析失败的时候,跳过该字段继续解析其它字段,保证其它正常数据可以展示出来。
2.当某个字段解析失败的时候,通过观察者模式,将异常抛出,开发者在收到异常后可以进行相应的处理(如将异常日志上传到服务器,然后推动服务端RD解决)。
3.不影响对Gson库的使用。
侵入编译流程,在编译过程中,修改gson库的字节码,修改gson解析相关的方法,在数据类型不一致的时候,跳过当前字段的解析。
gson-plugin 接入文档
1.工程根目录加入repositories
buildscript { repositories { maven { url 'https://jitpack.io' } } } allprojects { repositories { maven { url 'https://jitpack.io' } } }
2.工程根目录build.gradle加入ClassPath
dependencies { classpath 'com.github.LianjiaTech:gson-plugin:2.0.1' }
3.工程app目录build.gradle加入依赖
apply plugin: 'com.ke.gson.plugin'
4.可选调用(监听异常json字段,建议收到后上报给服务器)
ReaderTools.setListener(new ReaderTools.JsonSyntaxErrorListener() { @Override public void onJsonSyntaxError(String exception, String invokeStack) { //upload error info to server Log.e("test", "json syntax exception: " + exception); Log.e("test", "json syntax invokeStack: " + invokeStack); } });
5.添加混淆keep
-keep class com.google.gson.** { *; } -keep class com.ke.gson.** { *; }
.create();String param = "xxxxxxx";Map<String, Map<String, List<MpAppInfo>>> inParams = gson.fromJso