HTTP那些事-JSON反序列化

上文中HTTP那些事-JSON数据,我们提到,能否让我们的HTTP框架帮我们完成自动反序列化的操作。同时也给大家做了些提示:泛型和反射。

现在我们以Volley为例:

在Volley中有三种Request:FileRequest,StringRequest,ImageRequest。

JSON数据也是字符串,所以我们要重写StringRequest中的部分方法就可以咯。

看下StringRequest源码,你会看到解析服务器byte[]到String的是parseNetworkResponse(NetworkResponse response),解析完String直接就return给外层了。

这里我们也采用相同的方式,创建一个GsonRequest< T >继承Request< T >, 至于实现,先把StringRequest的代码copy过来。唯一不同的是,StringRequest因为指定返回String类型数据所以不需要泛型。

在parseNetworkResponse(NetworkResponse response)中,我们引入gson来反序列化json string,T的class怎么办呢?你可以通过外层显式的传进来或者通过反射来拿类上的泛型T的type。两种都可以。

具体到代码:

json01.png

扩展完毕,你只需要new GsonRequest,声明好泛型T,等待接收t对象回调就好啦。

json02.png

如果你想知道这种扩展是如何一步步推导出来的,可以看Stay录的专题视频。
传送门:预处理服务器返回的数据(JSON转对象)

像这样的扩展还有很多,框架不是万能的,要合理的根据自己的需求定制你想要的框架。

最后,留个问题给大家,如果是服务器返回了1M的JSON数据,还能用上述扩展么?如果不可以,那该怎么办呢?

声明:本文为Stay原创,未经允许请勿转载 有心课堂(stay4it.com) 传递给你的不仅仅是技术~