资讯专栏INFORMATION COLUMN

gson-plugin告别Json数据类型不一致(一)

canopus4u / 1219人阅读

摘要:六原理说明侵入编译流程,在编译过程中,修改库的字节码,修改解析相关的方法,在数据类型不一致的时候,跳过当前字段的解析。

一、目录

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

三、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.** { *; }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72239.html

相关文章

  • gson-plugin如何在JitPack发布(四)

    摘要:一项目地址项目地址二与关系普通的库可以通过源码的方式直接引入并使用,是一个插件,无法通过源码的方式使用,只能编译并发布以后,才能被正常使用。是一个代码仓库,我们可以将源代码托管在这个平台上。 一、项目地址 项目地址:github-gson-plugin 二、github与JitPack关系 1.普通的java库可以通过源码的方式直接引入并使用,gson-plugin是一个插件,无法通过...

    StonePanda 评论0 收藏0
  • gson-plugin深入源码分析(三)

    摘要:六修改内部类的方法这个的方法是对类型的数据进行解析,我们判断输入的数据类型不是类型,就直接跳过解析,核心是在方法中插入方法。每一个类每一个内部类每一个匿名内部类,都会生成一个独立的文件,如。 一、项目地址 项目地址:github-gson-plugin 二、ReaderTools解析 /** * Created by tangfuling on 2018/10/23. */ pu...

    oujie 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<